"Coding uses a lot of thinking patterns that I hadn't really used since my math and statistics classes in college, and even back then not in this intensity"
And
"I guess my point is, that if you want to become a programmer, you have to be comfortable with having to learn new things constantly for the rest of your life."
So many conversations around "but I want to be a programmer, do I really need to learn math? Really, really?"
Yes, you do. But more disturbing than the resistance to learn math is the resistance to learn. Period.
What i like about the article is that, all though the writter admits there are some challenges, he does not whine about them, but instead he overcome them. Because of that, he has a good chance at succeeding in programming, or anything else for that matter.
What math do you think one needs to learn to be a programmer?
To be a good programmer, you need to think in a somewhat mathematical way at times, but you almost never actually need to know math beyond the elementary school or early high school level.
There's was an interesting essay in the Notices of the AMS a couple years ago called "What is Mathematics For?" that explored the widespread belief that high school math is an important job skill. The conclusion was that it isn't for most people. However, learning high school math teaches reasoning, and that IS an important skill--so even though most people won't have any use for the math, math classes are important. Here's the essay: http://www.ams.org/notices/201005/rtx100500608p.pdf
I think the same applies for programming. You need to be able to reason, and learning some math is probably the best way to pick up those reasoning skills.
I majored in math as a undergrad. One thing that got hammered into me by the professors whenever the career choice subject came up was that math is not a vocational training bur rather it's a training of high level abstract thinking and reasoning which can open up a number of career choices. It's a training of ability rather than knowledge. You might forget how a theorem proof work or even what that theorem is but you will remember the problem solving process.
As a proof they showed us the list of math graduates who became lawyers, economists, statisticians, teachers, writers, business admin, and of course computer scientists.
That really depends on what type of programming you're doing and the platform you're developing on top of. If you're doing a crud app in rails, I'd agree with you math itself is pretty much useless after knowing the core operations (add, subtract, etc...). But the moment you're dealing with lower lever programing, creating or implementing algorithms, managing memory, etc... understanding more advanced mathematical concepts starts to shine as a necessity more than an option plus. Actually, if you're developing a rails application for the financial or analytics sector you're most definitely benefit from knowing advanced math and having done a course or two on statistics.
Let's be honest, if you're creating an application to improve or help accounting of a business, you need to know accounting. If you're creating an application for banking and finances companies, you need to know financial math. If you want to make an app that converts a business' Excel data into complex charts you need to at least understand statistics and more complex math than the 15 year old learns in school. Don't even get me started on a program that draws graphics programmatically and the need for some trigonometry in there.
Lastly, though I do a lot of backend and sys admin stuff because of the nature of my speciality at work, I spend half my time doing frontend programming and css (thank god for sass), and if I didn't have knowledge of algebra and trig I would take at least half as much time to do what I do. I know (and work with) a bunch of great programmers, but I'm still the guy people go to at work for mathematical advise when al algorithm is not behaving as it should and it mathematically complex.
I'm not trying to argue with your point though, most of the time you don't need those advanced mathematical concepts, and the important part of learning math is the reasoning aspect. i completely agree with that. Nevertheless I've found that advanced concepts can speed development and in some cases having that knowledge can make or break a project.
The subject of math reminds me of a recent encounter with a client. We had a business requirement meeting. It's not software development related, not even technically related. It's purely for me to understand their business, processes, and business rules.
One of the important business rules came up in discussion and they were arguing among themselves what's right or just trying to convince each other what the complicate rule really is. I was like, it's just a simple set of formulas if the problem was decomposed into smaller steps. After I told them about it, they were like, oh yeah, it's that simple.
The resulting math were very simple but the process to derive those was greatly benefited from higher level math training.
I had a teacher in college that was discussing the math requirement for the programming classes he taught. I was at this point past the classes being discussed. His reasoning for wanting, I think Algebra 1, for Intro to Programming (C++ at the time), was not because the actual math was used in the class. He wanted, as you said, to ensure the students were capable of mathematical reasoning.
I think it would be interesting to see the same concept applied in the reverse; i.e. have a programming requirement for math classes.
At my university, there's always an embarrassing number of Algebra 1 sections under the math dept every semester (I'd even say that just the Algebra 1 & 2 offerings make up about 30-40% of their total sessions some semesters). And if I hadn't seen some of my friends tutoring student's in those classes, I wouldn't have really believed there was a necessity for so many sections, but now I do.
People just seem to have a really hard time extracting the concept of 'thinking mathematically', from the act of doing math itself, and I'd say it's because it is so abstract; once you go past basic money/counting scenarios, the real life analogs start to break down for most people, and all they see is numbers, symbols, and mysterious rules.
Programming on the other hand, while still pretty tough to grasp if you're new to that way of thinking, seems like it might be a gentler intro to me. Not only does it tend to have a culture of more intuitive naming schemes than math, and have a faster feedback mechanism (i.e. a REPL/compiler checks your code as opposed to a math teacher), it also makes modeling more real world systems really easy early on (so people won't feel bounded to just money or whatever as their anchor back to reality), especially if the course goes into OOP at all before it's over.
That may be, but it is not the essence of mathematics classes, in which a good deal of rote memorization and continuous practice of specific systems is required to pass.
I am going to answer to my self as a way to answer all the comments at the same time.
What I am rescuing from the article is the ability to learn beyond looking for what is the minimum that needs to be learned; the attitude of "I need to learn this, so I'll stretch my self" as opposed to "I don't need to learn this!, I can learn the least possible!, it is only useful up to this point! I have never used beyond the basics!". If this is your attitude, then good for you, but as an employer, I am not going to choose the employee that it is just looking for the minimum to learn to get by. And that attitude is the difference between a code monkey and professionalism.
This is disturbing to me because today the resistance is towards "math", tomorrow will be towards "C#" ("why do I have to learn that if I can easily scaffold in ruby?" multiple technical reasons, but the one that hit the most for programmer that are not living in their mom's basements is: Because I sign your paycheck), and the day after it would be something else. In general it reflects a problem with learning.
My comment does not goes towards math exclusively, but towards the ability to enjoy learning, and that is a color of the character.
The comments of I don't need to learn this or that (math, or whatever else) tells me more about who you are than engaging in what is the level of math that you need to learn.
Of course some egos will feel offended and call me and my high horse... then again...
Do you really have to learn "math?" Is dividing by two "math" or just intuition? I rarely use the advanced math I learned in my math minor in college. Instead it's just like business: you need to have an intuitive sense of numbers and be comfortable shuffling them around.
I.e. Learning math is not a pre-requisite, it's a byproduct.
You don't need to know math to program, but as you become a better programmer, you _want_ to tackle more challenging problems - some of which inevitably involve math (and knowledge in general) that you aren't familiar with. To solve these problems, you have to learn as you go and that, as others have noted, is the real hallmark of a good programmer.
Becoming familiar with dozens of esoteric APIs that may change next month is not the fun kind of learning. The practice of programming is full of a lot more busywork than it looks like from the outside.
I think this post touches on an interesting point about web development (might apply to other areas too, but the web seems particularly bad). A lot of things appear to be easy (Rails, Django, Heroku, AWS, JQuery etc.), but the number of different components you need to manage is still overwhelming. Furthermore, you often end up having to develop a low-level understanding of problems that someone else claimed to have solved for you. While this low-level knowledge is useful, it does add significant amounts of complexity for beginners and people who might not be committed as the hardcore full timers out there.
As we seem to push more and more for the "everybody should learn how to code" mindset, I think there is a big opportunity for someone out there to combined managed and protected environments with the ability to write your own code. I don't know if the solution is unifying languages across front and back end or a better set of abstractions, but I see way too many obstacles for 'simple' coding (although the situation today is without a doubt better than ever), and I imagine this is some of what the author of this post ran into.
I wish that the learn-to-code movement had a greater emphasis on code as a utility belt, rather than "here's how to make a social website!"
Web dev is exceedingly complex and involves a lot more memorization of arcane things than does general purpose programming. Whereas for a non-technical founder, the important thing to learn is how aspects of business and content can be handled in modular, abstract ways (something that is apparent after learning loops and methods).
Learn enough code to understand implications of such things as granularity of data, taxonomy, and automation...if a novice can generate a static webpage chart from mashing up multiple data sources, that is hugely useful
It would be great if everybody saw code as a utility belt, but I imagine that it would be unrealistic to expect people to develop those skills. When I think about what kinds of tools I use in, say, home DIY projects, I tend to have a decent understanding of a narrow part of the field but not a lot of knowledge about the area in general. I know how to change a light bulb or a fuse or fix a power strip, for instance, but I don't claim to know much about circuits in general.
For some careers, particularly technical ones, "learning for life" / autodidactism are no longer optional. You're required to keep up with all the latest research, trends, tools, and a variety of other things that make you current. Sure, having a solid foundation helps, but is no longer enough (I'd argue it hasn't been enough for a long time.) You're required to learn every day to keep up.
What some here (who I'd venture are more likely than the median person to be autodidacts) may find surprising is that many people find the idea that you have to "keep learning stuff after college" distasteful, even abhorrent. The "go to college so you can get some job and then do what you 'REALLY' want with your life" thing is vanishing quickly, and the level of competitiveness in society (well, in America at least) is increasing.
The economic disparities this creates have been discussed at length, but the social ones less so. The fact that some careers require non-stop learning for these people means that in some ways school never ends, and the post-college, "no more competition" sigh of relief never comes. To me this is neither good nor bad, just inevitable at this point, but I think understanding the perspective of those who can not or will not follow the self-learning-for-life path is important. If nothing else, people here will know the reason that they are so grumpy.
I wish more business guys would try to learn programming, so well done sir. But I do have a quibble with this statement:
> if you want to become a programmer, you have to be comfortable with having to learn new things constantly for the rest of your life".
In my experience, the quickest way to tell that someone is not cut out to be a programmer is when they complain about the amount of continual learning that is a requirement of the job. The only way you can become a great programmer is if you LOVE learning new things, and the prospect of there being a great wide expanse of things yet unlearned fills you with excitement instead of dread.
So I think beyond having to be comfortable with that process, it better be something innately necessary to you or you will get burned out on this job.
That's so true! I used to love to learn... I mean I had to learn Spanish in 6 months when I moved to Costa Rica for an internship. Plus I've read at least two books per month for the last 3 years (business and psychology stuff). But learning to code was a lot more exhausting because it's based on knowledge and there's no room for bullshitting (unlike business ;)
There's a big difference between the kind of "learning" that is absorbing a lot of data (reading business books, studying chemistry, reading history) and using that data to draw solid conclusions. The former is kind of fun, in the same way that watching TV is fun. It can be mildly entertaining, and your role in it is mostly passive. The latter is hard work, but yields a much better high on success. I don't think the pleasure is due to the greater effort. Instead, it seems to come from the awareness of the new vistas you've managed to unlock.
Programming has elements of both kinds of learning. You need to learn the rules of syntax. You need to understand the libraries you are using. There are plenty of other basics that you need to know, but aren't particularly satisfying to learn. But once you start solving problems, the experience is very different. In your fist six months, everything is new. Your sense of achievement is great. As your skills expand, more of your work is simply good engineering. Unless you are constantly pushing the boundaries, your new discoveries are more limited.
TL;DR: reading business books is comparable to studying programming libraries. Successfully executing a business deal is more comparable to building a MVP.
exactly. Thinking that you're a decent programmer after 6 months is nothing but hubris, and shows you're still in the stage of not realising there is much, much, much more to learn. Or his definition of 'decent' does not match mine.
The latter. I know a lot of great coders, and most of them set the bar for "decent" very high. By decent I mean that you could actually write code to solve most problems you come across. Is the code going to be less than optimal? Of course. Most of the time it's even going to be pretty ugly code (you should see my backend code for a case in point). I'm not being presumptuous, I just have lower standards than most of you guys :)
Which actually sets the bar pretty darned low, when you think about it. With only a little of the right sort of information, and a higher-than-normal give-a-shit factor, it would be easy to get beyond the level of the vast majority of 21-day wonders and cargo culters out there.
I would rate that level of coder as a 'good' coder. I would rate 'decent' as 'the level at which I don't wince when I hear who has been assigned to the project'.
Web development is definitely getting easier, but it's still not easy. I spent a lot of my past 4 years doing conversion optimization and testing out different marketing channels. So I was exposed to basic html/css/php/mysql. But that didn't really prepare me for web development.
I'm about 4 months full time into web dev, and there's just so much that goes into developing a web app. And then there's the team component. And then the web app needs to scale. Ruby, Rails, MySQL, MongoDB, Javascript, how to set up the hosting, software design best practices, debugging, etc. If I didn't have a mentor or peers help me through this I seriously don't know long it'd take to figure out all the different pieces and how they fit.
"I guess my point is, that if you want to become a programmer, you have to be comfortable with having
to learn new things constantly for the rest of your life."
I think that applies to anything, if you want to have any measure of success, especially these days.
"So the lesson I've learned is that - even though I like coding -
I enjoy building products even more."
I took this entire year off to learn new things, like web programming, etc. I have around 20 years of programming experience, with a background in C/C++, so I had a very significant advantage over the writer of the article in terms of getting started in that direction.
But I did come across similar things that the writer talked about. I first went about it by choosing Python/WebPy as my backend, and then switching to Wordpress as a front end for my website because I got tired of having to do every single little thing, and subsequently learning PHP. Then I started focusing on Javascript, jQuery and AJAX. My website is hosted on EC2, so I needed to understand how that all worked (not nearly as difficult). Then I tried learning how to make a Facebook app, so that ended up taking a few weeks, since the documentation is amongst the worst I've ever encountered in my career. I needed to figure out how nginx worked in order to get certain things working, and I also needed to learn the basics of Photoshop and Illustrator and basic graphics techniques. Luckily I have several friends in design that helped me get over this hump.
These last 8 months haven't felt like an exercise in learning how to program more so than 8 months of constant problem solving. Sure, I learned a bunch of new technologies, but my main goal was to get up some web-based projects, and every step of the way I encountered problem after problem, and my job was to solve these problems by any means necessary. Solving these problems entailed me having to learn Javascript, jQuery, Photoshop, Illustrator, etc. I didn't relish the idea of having to keep learning new stuff, but I did it because I knew it was the fastest way to solving my problems. I can't say I'm an expert in any of the technologies above (I constantly get Javascript and Python syntax mixed up in my head, and I google 80% of what I need), but I can solve just about any problem that I've come across.
I think this is the key to bootstrap yourself and doing anything related to technology, be it programming, sysdmining, etc. It's not so much the love of constant learning, but rather not giving up in the face of constant roadblocks, and constantly attack problems over and over and over and over again until you solve them. Don't get me wrong, I've very much enjoyed learning these technologies, especially Javascript which is a wonderful language (despite its flaws), and so much more powerful that I ever thought. But I know I've only started the scratch the surface.
As well, another big factor is keeping a high level of emotional energy in order to keep pursuing your goals. One of the things I was working on was using Tesseract to do OCR on uploaded image files. After 3 weeks of trying to get it to work, I achieved about a 97% accuracy, but because of some underlying bugs that I didn't understand, it wasn't good enough. I was frustrated and disappointed and finally gave up on it, and moved onto my next project, which I finished in about 2-3 weeks. But after that, with renewed energy, I decided to give it one more go at my problem, and spent another week at it. This time I used OpenCV in conjunction with Tesseract, and achieved almost a 100% accuracy, but more importantly, I figured out a way to get around the bug that had been dogging me on my first attempt.
I'm at the point now where I'm not a "great" web programmer, but I definitely can take a design from one of my friends, and implement it, pretty much to spec. I'm not fast, and I'm not creative, but I'm confident I can solve just about any problem I need to in order to finish my task.
This may be a bit tangential, but may I ask what led you to decide to learn web programming? My background is in web programming, though I have much less programming experience overall than you (~5 years). For me, I feel like learning C/C++ would lead to increased understanding of general programming and better career opportunities. It seems to me that C/C++ (C++ in particular) is still relevant, and is becoming even more relevant.
And by learning C/C++, I mean really learning C/C++, not just relying the three classes that I took in college that used one of them. Lately I've been working on a C++ Windows TFTP server which has caused me to learn TFTP (very simple) and WinSock (complex so far). So I'm just curious what your thoughts might be.
To be honest, I first started out trying to learn iPhone programming, simply out of interest. Unfortunately I got caught in between the transition between Xcode 3 and Xcode 4, where the interfaces and some of the terminology changed and the books were all based on Xcode 3. It got frustrating and tedious trying to convert concepts from Xcode 3 to 4 and back, so I decided to jump to web programming, since I envisioned the back-end of many iPhone apps would be web-based, with the goal of returning back to iPhone programming. During that time, I made some pretty good progress with the web stuff, and it was pretty enjoyable so I just stuck with it. Pretty soon, I'll get back to learning iPhone programming.
Personally I think C/C++ is still relevant, and it's my language of choice, but I'm not close-minded about it. For example, in developing my OCR functionality, I discovered how wonderful Python was, because it was a sane programming language, and allowed for much quicker development and progress than C++. I'm now a Python convert, although I still have many more miles to travel before I can become a competent Python programmer. In addition, Javascript is a lot more powerful that I imagined, and it looks like a lot of people are turning Javascript into something a lot more powerful, ex. Node.js. If I had to put my money behind the languages that might really blow up in the near future, it's Javascript and Python.
As to the career opportunities of C++, I can't really speak for that because trends change quickly. The key is to be flexible and open-minded, and not get stuck in a particular pigeonhole otherwise you'll find yourself like COBOL programmers in the late 90s. You will definitely learn a lot by going the C++ route, and being "closer to the metal" as some people say, you can and will learn a lot of different concepts that aren't available to many other languages, like memory-management, etc. It might make it easier to take up other languages in the future, as well, so it's not something I would discourage anyone from learning.
> * One of the things I was working on was using Tesseract to do OCR on uploaded image files. After 3 weeks of trying to get it to work, I achieved about a 97% accuracy, but because of some underlying bugs that I didn't understand, it wasn't good enough.*
Ha, I've been working on this thing too, though I suspect for different use cases. I don't know if you were using this as a general example of how you managed to solve a problem...but this really isn't a "web programming" problem, in that it's a program that has many uses outside of a web server. In fact, it should be a standalone script that has no awareness of the web (unless it's doing something with a lot of moving parts, like recording results and doing machine learning).
In any case, the problem with people trying to learn web programming is that it encompasses many things...I'd argue that web programming doesn't really require learning HTML beyond the basic idea of HTML (and CSS)...and yet many beginner programmers spend a month or so thinking that programming consists of memorizing tags and CSS rules (nevermind cross-browser considerations)...which must be frustrating as hell.
It is a Python script I execute from a PHP file, so it doesn't have any knowledge except for the files that I am trying to scan.
I google just about any HTML issue I have, so I don't spend too much time trying to learn the intricacies of it. If anything, trying to understand why CSS was behaving as it was, was what got me closest to smashing my keyboard more than a handful of times. Stupid Wordpress.
But I don't think it's necessarily a waste of time for absolute beginners to learn and memorize HTML as their first exposure to "programming". Having a fundamental understanding of how making changes to a script or file affects the output to a web browser is something that I imagine most non-programmers aren't familiar with, so having a firm grasp of this concept will probably help them digest more advanced concepts later on. Being able to whip up a web page is probably one of the first things I would teach beginners if I ever taught a course on programming.
I've come to accept that I "start over" because I like to keep learning. I love- no I need - to fight new problems and learn new domains. From physics to teaching to sailing to jiu-jitsu to (web) programming to business (which I thought, arrogantly, was going to be rather simple) it's what my brain craves.
It's a curse in some ways. It seems to me that my ego is under far more attack than it should be at my age, as I am never the deep-knowledge expert about any topic. And I don't bluff very well.
On the other hand, I can't seem to have it any other way. It's probably a form of arrogance: "Of course I can do that, hand me that [chalk | gi | keyboard | main sheet | ...]
When it comes to learning new things, I do have that belief that I can do whatever I need to get things done. I've spent the greater part of my post-college life hustling to learn new things, so throwing a couple of more concepts on the pile likely won't be too different from what I've already seen.
Physically though, my back tells me otherwise... and usually wins that argument :)
"As a result I've become more focused, more logical and smarter. But I've also become more detached from everyday life and less fun to hang out with. I'm not sure yet if the change is permanent, but I certainly hope that it can be undone :)"
6 months away from programming, and you'll be fine :)
When I was in high school and just starting out I felt that I was becoming detached, and I hated it so much. At some point, however, I decided that I didn't really care if I was becoming more detached and less fun to hang out with. It was more like I had redefined fun, and I eventually found new friends that fell within this definition. There is definitely a change though, and I don't blame the author for feeling uncomfortable. You either learn to accept it or you walk away. The choice is yours.
Coding definitely made me feel like I was getting dumber the first few years. idk if anyone else experienced the feeling from holding so much logic in your head and then going back to reality would give me an exhausted feeling mentally. Anyways, that was a long time ago and I've learned how to roll with it since then. Now I'm even more fun to hang out with :)
Now that I think of it, at first we're overloaded learning programming. And then we reach a point where we really know a lot about all kinds of things and we hunt for new things to learn because we've lost that 'overloaded' feeling. I know I scour ycombinator and reddit and other blogs a lot for new interesting programming things to learn about.
I've experienced this "detachment" with friends and family. I sometimes have to make an effort to really engage in regular conversation. It's like programming, continuous learning, etc. take so much brain power that I start to go into self-preservation mode. In social situations, it's sort of "turn it off or you won't have anything left for dealing with development work".
This article was pretty interesting to read, but unfortunately drew one incorrect conclusion...
"I guess my point is, that if you want to become a programmer, you have to be comfortable with having to learn new things constantly for the rest of your life."
This conclusion implies the rate of learning experienced in those 6 months would be the same forever, and I think that's not entirely realistic. While technology is rapidly changing, it's FAR more sustainable to maintain knowledge across a wide variety of areas than continue at the pace and breadth the OP experienced.
Also, it depends on your field/focus. If you're talking about web programming, sure. If you're a C++ app programmer, chances are your world isn't changing too dramatically each year.
Sorry guys if you get a server error page, seems like my heroku dev postgres can't handle ANY traffic. I haven't implemented connection pooling yet and I run out of db connections way to quickly ... will try to fix it or set up my own db!
This article hits really close to home. After graduating college and getting a job in biotech I quickly realized that I don't want to spend next 30years in front of a lab bench, dealing with FDA etc. so I have been learning to code. starting with Django (i knew some Python beforehand) then I realized I need some javascript, jQuery, git, MySQL. The only difference is that I love it. Each technology provides something that blows my mind.
My experiment started in May and is going while I'm holding on to my lab job. By October I hope to have a portfolio going, I have two apps ready. I really hope it will all pan out.
"I guess my point is, that if you want to become a programmer, you have to be comfortable with having
to learn new things constantly for the rest of your life."
I really feel like this is the outlook everyone should take on life, not just programmers. Maybe the causality ought to be switched; good programmers are people who have a "learn something new every day" outlook on life. Hell, it could even be said that good people in any field are those who take that viewpoint on life.
I always thought that "less fun to hang out with" people were attracted to programming, as it requires more solitude and attention to detail thinking, and now you are saying that even "normal" people seems to get this kind of mindset after some time.
Maybe i should quit programming some time to see if i can reverse to a more social style of thought.
I'm too deep in the coder lifestyle these days to say what it is like on the other side, but as an former serious music student, I can offer an analogue.
Anybody who has learned music and studied it seriously can tell you it colors the way you hear all music. When I was deep in it, pop music was intolerable. I liked rock, don't get me wrong, but it was all art/hipster stuff. Before you're "enlightened" with musical performance and theory, music just kind of "washes" over you. You get a beat and a mood but you're not taking it apart. After such "enlightenment," you'll hear it all in terms of time signatures, keys & changes, scales & modes, references, cliches & conventions, etc. Much like being a coder, it is a beautiful, cursed understanding. I'm now fully a decade into "recovery" from thinking I was a musician, and I will tell you I really like not having to think so damn much about my music.
So, if that is at all similar (and I think it is; btw, lawyers are another class of geek that have similar problems to programmers and musicians)...yes, it can get better! :)
The difference between a business person and a programmer: an intrinsic love of learning new things.
Programmers make better entrepreneurs because (shock) loving the act of learning new things as an end in and of itself makes you way, way better at it.
When I'm with friends, I'll get caught up in how a service, site, or app is assembled (i.e. interfaces, wrappers, cloud server connections, etc), and take a conversation with friends off on a tangent they aren't interested in.
tweiss, by actually building the full-stack (front-end to back-end and deployment/ops), you've compressed the "out-of-comfort-zone" feeling all programmers eventually face from years to a few months. Bravo!
"As a result I've become more focused, more logical and smarter. But I've also become more detached from everyday life and less fun to hang out with. I'm not sure yet if the change is permanent, but I certainly hope that it can be undone :)"
I agree that coding is a constant learning process. But to suggest that this in some way makes you more detached from the world, and/or less fun to hang out with is ridiculously biased. I would like to believe the opposite is true. Programming and computer science in general have given me a sense of appreciation for the world and nature's algorithms that I could not have fathomed before. The social applications of strong logic and focus are infinite. Choosing to learn how to learn, or learning to program, does not mean you are choosing to become an introverted nerd or an extroverted socialite. I've learned nothing is really black and white (binary) like that.
As an example of how being more focused and logic can help, consider the scenario: You're talking with your girlfriend about who gets to be the designated driver one night, and all of a sudden the extra back rub you gave that one day three summers ago gets brought up as a bargaining chip in the argument. Reminding yourself and the other party to think logically and focus on the task at hand and not bring up things that are sure to spark dissension helps reduce these digressions and tangents during conversation. I think it is important that both parties in an argument at least can agree on what they're arguing about, and also at least on the scope of the argument. Now, I'm not just better at debate because of coding. My point here is that my life is enriched because can overlook the little things a lot more than I used to. I won't lecture my son for leaving his towel on the ground while it is wet when we're on vacation, because I have the focus to keep in mind what really matters: we're on vacation to relax and enjoy ourselves. This kind of easy-going behavior takes consideration and patience, given my short temper. Both consideration and patience are crucial to becoming at least a functioning programmer. It is even more than just patience and consideration though that are real life applications of traits strengthened through coding. When my friends and I are joking around, we tend to just morph and change jokes in a recursive manner to keep them interesting and to keep our lives exciting.
Being original is hard to do, and lots of original material is just old material tweaked a little bit. Our friend's name was Diego during the first iteration of his nick-name. Recursively and through several iterations, it changed to Diegs (Dee-eggs). Which changed to D-eggs. Which when he was very drunk became Grade D eggs. Which changed over time to just "Eggs." And you can use your imagination to guess how many different ways you can make eggs, and I can bet you almost all of them were used, and also used in conjunction ('fried, scrambled eggs') to address our friend, Diego.
Now, you sir, should not be convinced that learning to program makes you less attached to the world, and less fun to hang out with. On the contrary, you should embrace your powerful logic and focus and use it to enhance your life experiences and your disposition rather than to detract from them.
And
"I guess my point is, that if you want to become a programmer, you have to be comfortable with having to learn new things constantly for the rest of your life."
So many conversations around "but I want to be a programmer, do I really need to learn math? Really, really?"
Yes, you do. But more disturbing than the resistance to learn math is the resistance to learn. Period.
What i like about the article is that, all though the writter admits there are some challenges, he does not whine about them, but instead he overcome them. Because of that, he has a good chance at succeeding in programming, or anything else for that matter.
Maybe not in 6 months... But he will get there