The growth stages of a programmer - FunFunFunction #6

Fun Fun Function · Beginner ·☁️ DevOps & Cloud ·10y ago

Key Takeaways

Describes the growth stages of a programmer, outlining the phases of development and skill acquisition

Full Transcript

today we are going to explore the growth stages of a program a couple of weeks ago I made a video that turned out to be one of the most controversial ones I've made so far the video was called straight line code over functions where I stress that you should prefer simple inline code over function extraction that video got a lot of responses like this one thanks for the rest of the videos but I have to respectfully disagree with with this one testability composability and reusability are completely lost when you don't decompose into smaller units I plead with you to take this video down before my co-workers see it and continue writing huge monolithic functions that do 50 different things M Costello This is a fantastic comment you are right that some people should not watch that video because they might get the wrong idea and that depends on where they are in their growth as programmers and that is what I would like us to explore today today's video is a complete and utter rip up of a uh core answer by a fantastic former colleague of mine Blick I have linked the answer in the episode description Blick talks about three phases in the life of a developer the novice hacker the philosophy abstractor and the wise hacker Blick describes the novice hacker like this what this code it sure is ugly and I don't quite understand why it works but here it is and that is me and everyone when they are starting out as programmers you are copy pasting things all over the Internet and you don't quite understand all of it but it works and you're getting done as you grow older as a programmer you grow more and more into the second face the philosophy abstractor Blick describes the philosophy abstractor like this well this code works for now but if I move this part into a factory and create an interface for these methods it will also support all of these future edge cases that I can think of as a professional programmer most of your time would almost all of your time is spent understanding other people's code and I have done this a lot I have recently had the interesting experience of taking over code written by somebody who isn't a programmer by trade I've never done that before and it was very eye openening to me the person in question knows some programming and has written a complete piece of software but he's not a programmer by trade he's actually a doctor I expect expected his code to be messy and that I would have to spend a lot of time to make sense of it but in fact it was quite the opposite understanding his code base was actually much easier than most of the code bases that I encounter at work H and his code is messy there's a duplication Galore and there's spelling errors all over the place but that doesn't matter because his code is straightforward his code consistently takes the simplest possible route to solve a problem and that makes it really easy to understand and follow even though it is the very opposite of elegant in contrast I've uh many times taken over software by developers who have a lot of knowledge about software design patterns and how to do optimization and man have they made use of that their code does not have spelling errors their code does not have duplication no their code has an abstract Base Class you simply need to implement this abstract Base Class and pass it an object that implements this specific interface and then you have something that just works with logarithmic time complexity it is magnificent gaze upon my creation and in a way it is incredibly impressively put together but when it comes down to it code like that is very often very difficult to understand to figure out what the program does you have to move to this other file and remember that this other thing that is being called here is being injected over here the programmer that wrote this did it with the best of intentions trying to abstract problems away from you but in the end it just made things harder and that brings us to Blick's third stage of programmer growth so there's the novice hacker the philosophy abstractor and the wise hacker and BX describes the wise hacker like this move fast break things revise and fix and get done the wise hacker knows the same patterns and optimization techniques that the philosophy abstractor does the difference is that the wise hacker knows that you should almost never use them the keyword There is almost there will be parts of your code where you should optimize or generalize or modularize the hell out of it and when that happens the wise hacker knows how to do it and how to do it well but again the wise hacker only does it when absolutely necessary and that is because the wise hacker knows that modularization and generalization and optimization have costs these things are not like world peace or kittens they are not universally good they are not free you need to get a lot of value out of them or they will not be worth it when you are modularizing or optimizing or generalizing you are making a tradeoff the wise hacker does modularize the wise hacker does generalize the wise hacker does optimize but like Spider-Man teaches us with great power comes great responsibility and you should only use your powers when necessary the wise hacker writes stupid simple and straightforward code whenever possible you have watched an episode of fun fun function a weekly show where we try to become more excited and confident about programming by exploring old wisdom wild ideas and having fun bye Jo do not miss out on the next episode follow me on Twitter at mpj me until until next Monday stay curious

Original Description

💖 Support the show by becoming a Patreon https://www.patreon.com/funfunfunction Full script here: https://medium.com/@mpjme/f03fcb9c1531 This video is a complete and utter ripoff of a Quora answer by a spectacular former colleague of mine, Blixt. (https://www.quora.com/What-are-the-growth-stages-of-a-programmer/answer/Andreas-Blixt) Blixt talks about three phases in the life of a developer: 1. The novice hacker 2. The philosophizing abstracter 3. The wise hacker The wise hacker knows the same patterns and has the same optimisation skills as the philosophising abstracter — the difference is that the wise hacker knows that you should almost never use this knowledge. 💛 Follow on Twitch and support by becoming a Subscriber We record the show live Mondays 7 AM PT https://twitch.tv/funfunfunction 💛 Fun Fun Forum Private discussion forum with other viewers in between shows. https://www.funfunforum.com. Available to patron members, become one at https://www.patreon.com/funfunfunction 💛 mpj on Twitter https://twitter.com/mpjme 💛 CircleCI (Show sponsor) Robust and sleek Docker-based Continuous Integration as a service. I used CircleCI prior to them becoming a sponsor and I love that their free tier is powerful enough for small personal projects, even if they are private. Use this link when you sign up to let them know you came from here: https://circleci.funfunfunction.com 💛 Quokka (Show sponsor) Wonder how MPJ evaluates JavaScript inline his editor. Quokka is the answer - use this link when you buy to let them know you came from here: http://quokka.funfunfunction.com 💛 FUN FUN FUNCTION Since 2015, Fun Fun Function (FFF) is one of the longest running weekly YouTube shows on programming 🏅 thanks to its consistency and quality reaching 200,000+ developers. 🤦‍♂️ The Failing Together concept is what makes FFF unique. Most coding content out there focus on step-by-step tutorials. We think tutorials are too far removed from what everyday development is like. In
Watch on YouTube ↗ (saves to browser)
Sign in to unlock AI tutor explanation · ⚡30

Playlist

Uploads from Fun Fun Function · Fun Fun Function · 18 of 60

1 Higher-order functions - Part 1 of Functional Programming in JavaScript
Higher-order functions - Part 1 of Functional Programming in JavaScript
Fun Fun Function
2 Map - Part 2 of Functional Programming in JavaScript
Map - Part 2 of Functional Programming in JavaScript
Fun Fun Function
3 Reduce basics - Part 3 of Functional Programming in JavaScript
Reduce basics - Part 3 of Functional Programming in JavaScript
Fun Fun Function
4 Destructuring: What, Why and How - Part 1 of ES6 JavaScript Features
Destructuring: What, Why and How - Part 1 of ES6 JavaScript Features
Fun Fun Function
5 Reduce Advanced - Part 4 of Functional Programming in JavaScript
Reduce Advanced - Part 4 of Functional Programming in JavaScript
Fun Fun Function
6 Closures - Part 5 of Functional Programming in JavaScript
Closures - Part 5 of Functional Programming in JavaScript
Fun Fun Function
7 Too many tools and frameworks!
Too many tools and frameworks!
Fun Fun Function
8 Currying - Part 6 of Functional Programming in JavaScript
Currying - Part 6 of Functional Programming in JavaScript
Fun Fun Function
9 Recursion - Part 7 of Functional Programming in JavaScript
Recursion - Part 7 of Functional Programming in JavaScript
Fun Fun Function
10 Promises - Part 8 of Functional Programming in JavaScript
Promises - Part 8 of Functional Programming in JavaScript
Fun Fun Function
11 Staying relevant as a programmer
Staying relevant as a programmer
Fun Fun Function
12 Factory Functions in JavaScript
Factory Functions in JavaScript
Fun Fun Function
13 Composition over Inheritance
Composition over Inheritance
Fun Fun Function
14 Software needs to be better - FunFunFunction #1
Software needs to be better - FunFunFunction #1
Fun Fun Function
15 Unit testing: How to get your team started - FunFunFunction #2
Unit testing: How to get your team started - FunFunFunction #2
Fun Fun Function
16 Straight-line code over functions - FunFunFunction #3
Straight-line code over functions - FunFunFunction #3
Fun Fun Function
17 Clojure - FunFunFunction #5
Clojure - FunFunFunction #5
Fun Fun Function
The growth stages of a programmer - FunFunFunction #6
The growth stages of a programmer - FunFunFunction #6
Fun Fun Function
19 5 tips to quickly understand a new code base - FunFunFunction #7
5 tips to quickly understand a new code base - FunFunFunction #7
Fun Fun Function
20 Semicolons cannot save you! - FunFunFunction #9
Semicolons cannot save you! - FunFunFunction #9
Fun Fun Function
21 Functors - FunFunFunction #10
Functors - FunFunFunction #10
Fun Fun Function
22 Functors: I was WRONG! - FunFunFunction #11
Functors: I was WRONG! - FunFunFunction #11
Fun Fun Function
23 Questions and Answers - FunFunFunction #12
Questions and Answers - FunFunFunction #12
Fun Fun Function
24 Streams - FunFunFunction #13
Streams - FunFunFunction #13
Fun Fun Function
25 Prototypes in JavaScript - FunFunFunction #16
Prototypes in JavaScript - FunFunFunction #16
Fun Fun Function
26 Fast or Flexible? - FunFunFunction #17
Fast or Flexible? - FunFunFunction #17
Fun Fun Function
27 Coders are herd animals - FunFunFunction #18
Coders are herd animals - FunFunFunction #18
Fun Fun Function
28 Weekend Kubernetes Shenanigans - FunFunFunction #19
Weekend Kubernetes Shenanigans - FunFunFunction #19
Fun Fun Function
29 Monad - FunFunFunction #21
Monad - FunFunFunction #21
Fun Fun Function
30 Moar Weekend Shenanigans - FunFunFunction #23
Moar Weekend Shenanigans - FunFunFunction #23
Fun Fun Function
31 Questions and Answers - FunFunFunction #24
Questions and Answers - FunFunFunction #24
Fun Fun Function
32 Losing motivation - FunFunFunction #25
Losing motivation - FunFunFunction #25
Fun Fun Function
33 LONGEST KUBERNETES SHENANIGANS! - FunFunFunction #26
LONGEST KUBERNETES SHENANIGANS! - FunFunFunction #26
Fun Fun Function
34 Fast code is NOT important - FunFunFunction #27
Fast code is NOT important - FunFunFunction #27
Fun Fun Function
35 Pair Programming a Facebook Messenger Bot - FunFunFunction #28
Pair Programming a Facebook Messenger Bot - FunFunFunction #28
Fun Fun Function
36 Writing unit tests for personal projects? - FunFunFunction #29
Writing unit tests for personal projects? - FunFunFunction #29
Fun Fun Function
37 Let's Code a Pomodoro Button - FunFunFunction #30
Let's Code a Pomodoro Button - FunFunFunction #30
Fun Fun Function
38 What editor do you use? - FunFunFunction #31
What editor do you use? - FunFunFunction #31
Fun Fun Function
39 Arrow functions in JavaScript - What, Why and How - FunFunFunction #32
Arrow functions in JavaScript - What, Why and How - FunFunFunction #32
Fun Fun Function
40 Is Programming Art? - MPJ's Musings - FunFunFunction #33
Is Programming Art? - MPJ's Musings - FunFunFunction #33
Fun Fun Function
41 Generators in JavaScript - What, Why and How - FunFunFunction #34
Generators in JavaScript - What, Why and How - FunFunFunction #34
Fun Fun Function
42 Haskell Basics - FunFunFunction #35
Haskell Basics - FunFunFunction #35
Fun Fun Function
43 Haskell - Baby's first functions - FunFunFunction #36
Haskell - Baby's first functions - FunFunFunction #36
Fun Fun Function
44 Is Big O relevant to you? - Q&A Part 1 - FunFunFunction #37
Is Big O relevant to you? - Q&A Part 1 - FunFunFunction #37
Fun Fun Function
45 How much are you allowed to Google? - Q&A Part 2 - FunFunFunction #38
How much are you allowed to Google? - Q&A Part 2 - FunFunFunction #38
Fun Fun Function
46 Haskell lists - FunFunFunction #39
Haskell lists - FunFunFunction #39
Fun Fun Function
47 var, let and const - What, why and how - ES6 JavaScript Features
var, let and const - What, why and how - ES6 JavaScript Features
Fun Fun Function
48 Why are some programming languages popular? - MPJ's Musings  - FunFunFunction #41
Why are some programming languages popular? - MPJ's Musings - FunFunFunction #41
Fun Fun Function
49 Does a developer need to be nice? - MPJ's Musings - FunFunFunction #42
Does a developer need to be nice? - MPJ's Musings - FunFunFunction #42
Fun Fun Function
50 bind and this - Object Creation in JavaScript P1 - FunFunFunction #43
bind and this - Object Creation in JavaScript P1 - FunFunFunction #43
Fun Fun Function
51 Examples of this and bind - Object Creation in JavaScript P2 -  FunFunFunction #44
Examples of this and bind - Object Creation in JavaScript P2 - FunFunFunction #44
Fun Fun Function
52 Prototype basics - Object Creation in JavaScript P3 - FunFunFunction #46
Prototype basics - Object Creation in JavaScript P3 - FunFunFunction #46
Fun Fun Function
53 Separation of concerns RANT - MPJ's Musings - FunFunFunction #47
Separation of concerns RANT - MPJ's Musings - FunFunFunction #47
Fun Fun Function
54 Cellular Automata - Pair Programming - FunFunFunction #49
Cellular Automata - Pair Programming - FunFunFunction #49
Fun Fun Function
55 The 'new' keyword - Object Creation in JavaScript P4 - FunFunFunction #50
The 'new' keyword - Object Creation in JavaScript P4 - FunFunFunction #50
Fun Fun Function
56 __proto__ vs prototype - Object Creation in JavaScript P5 - FunFunFunction #52
__proto__ vs prototype - Object Creation in JavaScript P5 - FunFunFunction #52
Fun Fun Function
57 Unity game pair programming - Let's code - FunFunFunction #53
Unity game pair programming - Let's code - FunFunFunction #53
Fun Fun Function
58 Throw out your tools - MPJ's Musings - FunFunFunction #54
Throw out your tools - MPJ's Musings - FunFunFunction #54
Fun Fun Function
59 Unit tests vs. Integration tests - MPJ's Musings - FunFunFunction #55
Unit tests vs. Integration tests - MPJ's Musings - FunFunFunction #55
Fun Fun Function
60 Object.create - Object Creation in JavaScript P6 - FunFunFunction #57
Object.create - Object Creation in JavaScript P6 - FunFunFunction #57
Fun Fun Function

Related Reads

Up next
Containers on Amazon ECS with Mama J
AWS Developers
Watch →