It's tough when you're reading HackerNews or spend a lot of time around technical people.
Technical people are, necessarily, very adamant about the technologies they use. When you're first starting out, you just want the "best."
Among the most common misunderstandings for non-technical people is what a programming "language" is. You don't realize that almost all programming languages are made up of very similar constructs. For example, knowing what I can do with a string in JavaScript and transferring that knowledge over to Ruby is a thirty second, syntactical exercise. Non-technical might imagine that you have to learn everything over from scratch. That's probably a result of etymology; when you hear the word "language" you think Russian vs. Spanish - completely different alphabets, concepts, grammar structures, etc. It would make more sense for those who can't program to think of it in terms of "dialects" or something like that, instead of "languages."
It doesn't actually mater what language you learn first, even if it's (god forbid) PHP. But we don't tell that to would-be programmers enough.
I probably wasted a month of my time because I started using zshell and oh-my-zsh on the recommendation of some guy I talked to at a meetup. He loved a tiny aspect of the flexibility of the prompt's highlighting. I barely knew how to use the command line. So heaven knows I didn't understand what happens to my $PATH when I'm dropping whatever the github repo is telling me to into ~/.bashrc instead of ~/.zshrc.
The time I really started to learn was when my company got into an accelerator, and all of the sudden I was the de-facto front-end guy. The only CSS I had ever written was tweaking colors on my blog, and I really had no idea what I was doing. But that didn't matter - I had to build, and it was a real project -- one that was seen by 10s of thousands of people on day one. It doesn't have to be that stressful to learn, but you have to build something and solve challenges learning along the way. There's really no other path that works.
So, my advice to budding programmers or those who may learn to code: Pick a language/framework and don't move on until you are fairly adept with that stack. Your tech buddies may mock your technology choices, someone will say you're an idiot because "this would be so much cooler in Lisp," but you don't have to be writing functional Haskell when you're learning to program. Take things form beginning to end, start to finish, and start changing technologies once you are well versed enough to understand the shortcomings of what you're currently using.
I really wish someone had sat me down and told me that when I started. I'd probably have saved six months of after-hours and early morning struggling.
> It doesn't actually mater what language you learn first
OK, start with Prolog. Now move to Ruby. Then Haskell, and include some SQL in that as well, somehow.
Now write me a program in APL.
Languages within the same paradigm are mostly similar. But there are a lot of paradigms, and some concepts don't transfer well at all. (Quick, what's the equivalent of an anonymous inner class in Prolog?)
...and moving from javascript strings to Ruby strings is far from a "30 seconds syntactical exercise", unless you don't take into account the fact that:
* Ruby strings don't necessarily have all the same encoding
* Javascript strings don't implement all of Ruby Strings' methods
* Ruby Strings are mutable, while JS's are immutable
* R̶u̶b̶y̶ ̶d̶o̶e̶s̶n̶'̶t̶ ̶h̶a̶v̶e̶ ̶C̶h̶a̶r̶s̶,̶ ̶J̶a̶v̶a̶s̶c̶r̶i̶p̶t̶ ̶d̶o̶e̶s̶ (edit: brain fart... I probably wrote too much Clojure[script], even if char literals in cljs just yield strings again)
(Or you use Opal, which doesn't abstract Javascript Strings much)
Totally agree! You'll often hear my talk about how terrible of a language PHP is, but at the same time, I'm forever grateful for PHP. It was my first language! It was simple, but most important, I made things work! I gained more experience with each little script I wrote until I finally felt comfortable enough to branch out.
Now I spend most of my time in Clojure, Ruby and C++, but, if it wasn't for PHP, I might not have ever felt that itch that led me to pursue a career in software development.
I think it's possible to have preferences without resorting to ad hominem. Sometimes it seems that just having a preference is enough to associate you with the assholes. The truth is, every group of every thing has assholes, or groups of people that perceive assholes. Every group has people that have preference, and people that don't. Every group has people that have opinions, and may voice those opinions with certainty when they actually have no certainty, and are aware of this, but don't know how to communicate it without creating logical paradoxes.
The people elements of communication are not easy to parse correctly. You can never truly know how other people think, you can only assume based on experience collected a priori, which may be all together constructed on a false premise that intialized the pattern of thought construction.
I wish I had known the things I know now, 15 years ago. But I don't. That's part of living. We learn and grow because of our experiences. It can't be learned in any other way.
Personally, I just ignore assholes, or if I choose to engage, I learn to play their own game. Then I typically stop judging them.
Technical people are, necessarily, very adamant about the technologies they use. When you're first starting out, you just want the "best."
Among the most common misunderstandings for non-technical people is what a programming "language" is. You don't realize that almost all programming languages are made up of very similar constructs. For example, knowing what I can do with a string in JavaScript and transferring that knowledge over to Ruby is a thirty second, syntactical exercise. Non-technical might imagine that you have to learn everything over from scratch. That's probably a result of etymology; when you hear the word "language" you think Russian vs. Spanish - completely different alphabets, concepts, grammar structures, etc. It would make more sense for those who can't program to think of it in terms of "dialects" or something like that, instead of "languages."
It doesn't actually mater what language you learn first, even if it's (god forbid) PHP. But we don't tell that to would-be programmers enough.
I probably wasted a month of my time because I started using zshell and oh-my-zsh on the recommendation of some guy I talked to at a meetup. He loved a tiny aspect of the flexibility of the prompt's highlighting. I barely knew how to use the command line. So heaven knows I didn't understand what happens to my $PATH when I'm dropping whatever the github repo is telling me to into ~/.bashrc instead of ~/.zshrc.
The time I really started to learn was when my company got into an accelerator, and all of the sudden I was the de-facto front-end guy. The only CSS I had ever written was tweaking colors on my blog, and I really had no idea what I was doing. But that didn't matter - I had to build, and it was a real project -- one that was seen by 10s of thousands of people on day one. It doesn't have to be that stressful to learn, but you have to build something and solve challenges learning along the way. There's really no other path that works.
So, my advice to budding programmers or those who may learn to code: Pick a language/framework and don't move on until you are fairly adept with that stack. Your tech buddies may mock your technology choices, someone will say you're an idiot because "this would be so much cooler in Lisp," but you don't have to be writing functional Haskell when you're learning to program. Take things form beginning to end, start to finish, and start changing technologies once you are well versed enough to understand the shortcomings of what you're currently using.
I really wish someone had sat me down and told me that when I started. I'd probably have saved six months of after-hours and early morning struggling.