I'm on the faculty at Boston University in the computer science department, where I teach software engineering, intro courses, and application architecture and development. Also a bit of a Deadhead.
This might be part of the problem: "I am a normal guy, I don't really code at home, or work on a personal project."
I see this as an indication that you aren't all that interested in programming; those who have a passion for it can't get enough of it. Take a look at how you spend your time at home...what is it that gets you excited, something that you'll work on nonstop until the early hours of the morning? That's your real passion, and following it might make you a happy guy.
“As much as I’d love our code to be fully compliant with the great programming practices of this world, I’d rather have it working — if possible before the heat death of the Universe.”
With your definition of “passion”, and with the advice itself. I think it’s important that your studies and your job are something you like to do, and that do not feel like chores. Wether you make your whole life revolving around it is your choice to make, but I’m old school, I consider variety equals sanity ;)
I have many interests and friends, and only so much time. I am very glad I get to spend my working hours doing something I love, I think I’m even becoming pretty good at it, but work is work and life is… well, life. At the end of the day, I like to let my head rest and focus on other things to have variety.
As to wether I’m passionate about it, well – according to your definition – surely not; I do not have pet projects and I will never ever spend my night on anything that is not an absolute emergency (or astronomy, obviously). That does not mean I’m a sad person at work, or that I’m not all that interested in what I do. I just have varied occupations.
I’ll conclude by highlighting the fact that many companies – at least in France – avoid hiring newbies who make it seem that programming is their only life, because they have a reputation of not fitting in with the team very well (heck, we ourselves have an intern who only ever speaks about his pet programs and a single video game, and boy is it a hassle). This might or might not be related, this talk just made me think about it.
I agree with you rather than Perry. If I'm "not passionate" because I have a relationship and friends and spend time with my coworkers completely divorced from work, then so be it. But I (and those I work with) believe that code should fit into your life, not be your life. Pet projects and after-hours work are great, but they aren't the sole determinant of passion.
I will put it this way: We respect doctors for the work they do. It's highly specialized and takes a long time to learn to do well. Is a doctor less passionate about their field if they leave the hospital and go to dinner and a movie with their spouse? Or to the gym? Or should every waking moment be focused on their job, reading and doing research in their spare time?
A big reason we want doctors to have lives and get sleep is so they don't make mistakes out of fatigue or burnout. Considering developers write the code that runs healthcare systems, banks and websites that individual businesses depend on, does it not make sense to subscribe to the same beliefs with us?
We can keep developers passionate about the field by NOT demanding they be consumed by it. Plus, if all someone can ever bring to the table is coding X, they'll never be able to relate to the people they're writing the code for (and by extension the projects themselves).
I think I like programming, really, but I don't know, i'm going to the gym 4 times per week and the other days I'm doing my homework. I really feel like I don't have time for a personal project. But you're right, if I loved it that much I could make some times for it, this is why I'm going to learn React (or maybe another framework ?) and start creating something. I already have 2 ideas for a little project which can help me to increase my skills !
I agree with Perry, about the passion. I always find something interesting to do or at least to read about.
As for JS, I've avoided it until now (59 y/o and counting... being a programmer since I was 20).
The approach I took with JS is to use it as a compilation target and focus on Typescript instead. I read so many praises about the language, so I started learning it. It's amazing.
A few more points on JS:
Modern JS is fricking fast, sometimes even more so than compiled C++
Node.js and npm (i.e. like PHP and Composer) are such a great, complete platform. I guess you won't miss a thing from Composer).
JS is "the new assembler". And typed arrays gives the language stellar performance, there's even a CPU emulator running Linux, right on your browser tab.
Ok calling JavaScript "fricking fast" or "the new assembler" is simply dishonest and I can't not call you out on this.
Yes, JavaScript is a lot faster than it used to be. Yes, you can do many neat things with it. And yes it is definitely fast enough for a lot of common uses.
However many things are NOT that fast in JavaScript and the single-threaded nature prevents JavaScript from solving a lot of performance problems easily. Additionally MANY languages are much faster than JavaScript and are much more suitable for writing performance critical software.
In my experience for most common use-cases nowadays the performance limitations come from I/O, network, and other such things and the absolute performance of the language (as long as it's fast enough) does not matter much. This means you can write perfectly fine programs in JavaScript, Python, Go, as well as Java (and others) and mostly personal preference and the fit of e.g. various frameworks and libraries available for your needs matters much more than pure performance in benchmarks.
I would argue with this. He says he is in college, so I totally understand there is no time for personal projects (I know I had none between school, work and homework).
It is pretty wild, but the fundamentals are still just computer programming and hopefully your employer will be able to help reign in the insanity with good technical direction.
There are a lot of great JavaScript articles on this site. I recommend querying and reading a bunch. Here are a few you might find helpful:
Hi Ben and thanks for sharing my article It makes me really happy !
I will read all of them since I kinda like how the JS community is so active ! When I see all these articles and tutorials I'm a little more relieved about it
One more thing, you only need ONE job and there are PLENTY of jobs in Java, C, C++, COBOL, PHP.
You are in control of your own career and JavaScript is only eating a bit of the software industry. There is plenty of room for all the languages, personalities, etc.
Becoming a one-trick pony is not very good career advice for people working in IT. There are plenty of one-trick ponies that get replaced by people capable of working in more than one language, and get stuck in dead-end jobs working on maintaining 30 year old software because they thought there are enough jobs for COBOL.
I mean a pure js usage, without frameworks etc. Ok, maybe jquery to perform ajax requests, because they're messy, but other things can be done with pure js. Like, creating a component using prototypes and native dom manipulation etc. Just to try it out. Check out this: vanilla-js.com
You've managed to perfectly illustrate what I truly see as the biggest issue with the way CS is taught and why I would never advise someone that wants to code to spend the time and money on college. To put it succinctly, the neckbeards at Universities are simply too resistant to change and refuse to acknowledge that Javascript has grown up, and they're damning their students because of it. This is a generalization, but I personally never had a professor prove me wrong.
Also, I want to note that "I am a normal guy, I don't really code at home, or work on a personal project," isn't a good sign, IMO. Granted, most personal projects most people would have any interest in are going to be web-based, and that means Javascript. Personal projects are where you learn the most, and if you're not coding at home, you don't love it, and if you don't love it, there is a greater than likely chance you will burn out. In all honesty, if you don't develop in your off time, I'm hesitant to call you a developer at all. Perhaps that's harsh and I'm just a zealot, but alas.
With that out of the way, check out YDKJS. It's arguably the best, most comprehensive JS guide online. Then, once you've got the basics of JS down, React is the way to go. The community is huge, documentation plentiful, and the ecosystem is an absolute joy to work in.
The issue is that HR/recruiters still mostly expect people to have degrees. Most of the time your application will just end up in the garbage bin for not having a degree. This process might even be automated in many places. Beyond that there is a bias towards degrees from specific institutions. It doesn't make much sense on a technical level, but that's just how it is here in the US. There was a point in time that I was considering dropping out of school, because I was making extremely good money coding. It was my boss actually that convinced me to stay in school. After going through a couple rounds of job searching and seeing how tough it can be even with qualifications, I'm really glad that I had that voice in my ear telling me to stick with it.
I'm US based, and never finished school. I think you'd be genuinely surprised what a healthy GitHub account attached to your LinkedIn can do. Degrees seem to be a stopgap for having actual code published. In my experience, once you've published even a small amount of usable, well documented code, they're pretty willing to overlook the degree. My LinkedIn is a joke when it comes to "professionalism," yet I've been bombarded with recruiter emails since linking my GH, even when I only had a small number of projects. It does make that first contact harder to establish though, I will admit that.
Establishing a reputation on StackOverflow and HackerRank can aid a LOT as well.
With all due respect, being bombarded by recruiters on LinkedIn and actually getting the job you want are two entirely different things. I'm glad things seem to be working out for you though.
This is very true. I don't want to seem like an advocate for dropping out, or like college is entirely pointless. Rather, pointing out that I think much of what is taught is antiquated with regards to most of the jobs on the market.
At the end of they day, what it takes for you to learn the skills and get code published is the path you should take. For some, myself included, college wasn't it. If you're the type of person that functions better in a self taught environment, diving head first into open source and contributing wherever possible can work. IMO it's one of the things that makes this field great. The path you take is less important than the fact that you get there.
For the sake of completeness, I want to note that pretty much all of what I've said could very well be exclusive to the web. It's my niche, and in all honesty I don't stray far because it's what I love. The rise of coding bootcamps, and even projects like FreeCodeCamp, seem to have liberated web development from the traditional CS model.
I agree entirely. College is overrated and generally poor at actually teaching vocational skills. Hopefully people will eventually catch onto the fact that an undergrad liberal arts education isn't all it's cracked up to be, but I still recommend people get degrees for the time being.
I never finished school (I stopped at half of high school), because my informatics and systems teacher gave me an F as final valuation in both the matters. Looked like programming stuff wasn't my destiny at all.
You know what? I worked for 3 USA startups in the past 5 years, the one I'm working for now was in the 2017 CNBC Disruptor 50 companies.
At work I am one of the most performant developers and my (graduated) teammates seek for my advices often.
I get at least a (serious) job offer each 1/2 weeks and nobody ever complained about my lack of school degree (except for when they want me to relocate to the USA and I can't because your laws suck).
School, for programmers, is a huge waste of time.
If you can afford to waste all that time then good for you, carry on and get your piece of paper.
If you want to get a job and start producing stuff, just prove your skills creating some cool projects on GitHub and the rest will come.
I'm not sure if React and Symfony (a PHP web framework) is a good combination. With the modern JS frameworks (React, Angular etc.) server based web frameworks seems to be dead, at least for new projects. If I were you I'd choose another language for the business layer (Python, Kotlin etc.) instead of PHP.
To throw in my $0.02, Sails.js and Trails.js have very low barriers to entry and allow you to build a JSON API almost mindlessly. Plus, then you're in the magical world of full-stack javascript, and server-side rendering and other isomorphic patterns are only a Google and StackOverflow away.
Why do you think symfony is dead? Symfony along with Laravel are two of the most popular php frameworks. React and Symfony makes a great combination. As a matter of fact, symfony has support for react with symfony webpack encore component. Webpack Encore is a simpler way to integrate Webpack into your application. It wraps Webpack, giving you a clean & powerful API for bundling JavaScript modules, pre-processing CSS & JS and compiling and minifying assets. Encore gives you professional asset system that's a delight to use.
I didn't say that. I said web frameworks in general, language agnostic. If all the view/controller processig is moved to the browser and the server simply serves REST services many functionalities of the framework are not used. I'm thinking about Struts, JSF, Spring MVC. I don't know the PHP world, maybe its frameworks do different things but I doubt it.
You are entitled to your own preferences of course, but the idea that the client/server model is dead is simply not true... Traditional frameworks have become very good at serving APIs.
When I was a student in France 10 years ago JavaScript wasn't taught. We were learning low level procedural languages and OOP languages (mostly Java). Where I was, teachers / researchers probably didn't call JS a language. I only got exposure to functional programming later. Is it still much the case?
Nice post/discussion you started here! Definitely going to read all the suggestions the community commented here.
First of all, let me tell you that I know how you feel: I did Java, C/C++ and others in college and then discovered the JavaScript ecosystem just like you. To be honest I recently started learning React too, but you seem to be doing pretty well so don't be scared.
On the other hand, an internship doesn't define your whole career and, as Ben said, there are plenty of jobs in those other languages if the JS family doesn't suit you or you end up not liking it, so don't worry.
I understand how you feel. I'm kind of going through the same thing.
Way back in 2012 or so, I was really starting to learn programming and I fell in love with JS. The only real frameworks or libraries I knew about were JQuery and... that's it.
After finishing a few projects and having felt like I really understood Javascript, I started learning Ruby on Rails, and Javascript fell out of my view. I woke up four years later, in 2016, bored with Rails and realizing that my love, Javascript, was too good for me now. I didn't understand any of the frameworks or what was so special about them. There were so many different things to learn about: the tooling, the linting, the webpack-ing, the components, the arrow functions!
I've started to reconcile with Javascript a little bit. I've made my way through an Angular 2 tutorial (which is in TypeScript rather than Javascript, incidentally), but we aren't best friends anymore, and I don't use Javascript often, if at all anymore. I write lots of Java for my Computer Science classes and lots of Python for my job.
Anyways, I would say it's not a waste to learn vanilla/native/pure Javascript (Javascript without any frameworks or other tools). Javascript is, above all, a fun language. It's dynamic and flexible and helped me understand basic programming paradigms. But if you already have a strong background in programming (you've said you know lots of different languages), Javascript isn't a necessity. You can do great things all the while completely ignoring it. Don't feel like you have to get a Javascript job or know even a smidgen of it.
software developer with almost no qualifications, but a strong desire for learning. i believe that you can make it without qualifications if you push yourself.
don't give up. the difference betw...
oh! one more thing: use the documentation on mozilla developer network (developer.mozilla.org/en-US/) for anything you need to know. it's WAY better than w3schools. and they have good tutorials.
There is a Chrome extension to exclude W3Schools from search results, and I highly recommend it. The information on there is usually outdated, or just flat out wrong.
Nice article. This summarize the fear I had back in my days of 3rd year as a Computer Science student (2007, I guess). That was a time of plenty 'revolutionary' java Web frameworks, and I knew none of them.
I think this is a technology dilemma that will never end: there is always a 'sexy' technology that everybody talks. And here is my advise: focus on learning the programming paradigms and the benefits of them, not just frameworks. If you are learning different languages, as you said, you are already in the right path, I think. The best job offer is the one which takes you as a programmer, and not as a framework specialist, so, for you will be a matter of time.
So you was in the exact same situation, and I think you are absolutely right, even if I don't know JS (yet!) If I'm good at programming I will find something interesting.
I was in the same boat a year ago! University thought basic programming and applied theories on C/C++,Java. As A student, HTML/JS sounds like kids work because we had those even back in highschool so no one really used JS to build their school projects.
I had to learn Angular 1 last year to actually be useful to the company business. I use some of my free time to checkout React and Angular 4. One day, I will read ECMAScript documentation to the heart! maybe.
Don't fear javascript. It has gained a lot of (IMHO) undeserved hate, just by people pretending/forcing it to be more like other languages instead of embracing the simplicity and power that it has. You can do almost anything in JS fairly well from web, desktop, mobile, games to drones. Also, people don't like all those boiling frameworks and tools but I sincerely love the fact that is a language always improving and with lots of things to do. If Netflix can run full JS, almost any idea you'll think could.
What was really frightening was 10 years ago and maintaining JS code for the %$`$ IE6 (ie6death.com/). Now things are getting better so don't be afraid! :)
I am a Software Dev girl who loves Uncle Bob, is drawn to the human side of software development and clean coded applications, and enjoys acting as a liaison between the business and tech.
Don't worry too much about feeling a Junior when you're just a 3rd year. The more you know, the more you see you need to know. In a vast sea of Software Development, it's much more important to get the main principles first. Afterward, you can pretty much adjust to any new language/framework in a reasonable time - provided you understand the basics. (Maybe switching from object oriented to functional can be slightly more challenging since it requires a different approach but it's still same ol' programming.) The technology changes so fast that when you finally start working there may be completely different frontend framework or technology worth learning, so it's better to fully understand the language. When you'll understand JavaScript properly there's a short way to understanding other JS based technologies/frameworks.
software developer with almost no qualifications, but a strong desire for learning. i believe that you can make it without qualifications if you push yourself.
don't give up. the difference betw...
i love javascript. and yes, there are a billion or more frameworks to pick... but start off with learning just the plain javascript before tackling the other frameworks. it's a lot like going straight to mindstorm lego before playing with duplo. hahaha!!
but seriously, javascript has se seriously quirky features, but as soon as you get thise figured out, you'll be able help anyone with "this". :)
i'm currently watching a video lecture series on nodejs by a guy called anthony alicea (on udemy) and he's really explaining the javascript fundamentals well. he does a course on plain js as well (understanding the weird parts) and i've liked the few videos i've seen.
tl;dr:
my suggestion: learn plain javascript and once you can make loops and popups and do stuff with the webpage, go for jquery. it's a really great framework and is still in use a lot (we use it at work - a decision they made because everyone knows it).
I would actually recommend starting with jQuery because it's relatively easy to use, does not require a complex build system, and its effects on the browser DOM are predictable and observable without special tooling. From there work on performing DOM operations with less and less reliance on jQuery. A site called "You might not need jQuery", a site called "Can i use", and the MDN javascript reference should help a lot. Frameworks like React and Angular are powerful, but also kind of magical so it's difficult to tell what exactly they are doing. I wouldn't discourage you from learning these frameworks, but I also don't consider knowing how to use them to be quite the same as understanding javascript.
Hey there, After a few years of making this account, I think it's time I start properly using it.
So, I am Hannan, a software developer, interested in web, javascript and more
Please don't work your up from jQuery, jQuery abstracts out a lot of good things that are important for beginners developers to learn in order to understand good design patterns of JavaScript.
Doing this, will only make you more comfortable with anti patterns of JavaScript such as using a lot of iife, like in $(document).ready function
React is also a salad of anti-patterns reminiscent of early 90s PHP spaghetti code. Inline XML, seriously? I would argue that jQuery is a pretty solid DOM toolkit and a no-nonsense way to introduce oneself to, ahem, the actual DOM.
I agree with the suggestion to study up on non framework JavaScript as the language is different from others. I'm in a similar boat as a junior developer trying to learn angular, but I love working on side projects and find that can really help build knowledge quickly. Best of luck!
Hi, Harvey! I get that each of the things you can learn probably feels like a whole new thing, each equally difficult and painful, but let me propose as an alternative, that you can see them as slightly different takes on the same thing. As a metaphor, each (fiction) book you read has a whole new story and whole new characters, but the core part of translating the characters into words and making sense of them is the same, and the part where there's a story is the same, and they all have characters, who probably have some sort of conflict. So the next book isn't the same as the first book, you don't have to learn to read again, you aren't experiencing a plot for the first time. Same thing here, they're all JavaScript at the end of the day (though some of them, JSX, for example, have some fancy ways that they display that JavaScript). If they're web view frameworks, they all have some way to turn the JavaScript into a DOM, probably via HTLM. They all have some way to respond to events and cause the DOM to update. So while the details change, and even the language changes, it's never as big as that first language, or that first framework. And as you learn more of them, you're exposed to more variations and more ideas, so the number of ways that any future one can vary become smaller and smaller. At some point, you've seen so many of them, that you can sort of go into a new one, study an example for a minute or two, and see how it's the same as what you already know and the handful of ways that it differs -- the parts that make it interesting.
One thing that will make this easier is if you understand the two sides very thoroughly. On the one side, you have JavaScript, on the other, you have the browser and its DOM. It's worth investing time to become comfortable in these things, because all the frameworks are translations between the two, when you understand them, then the ways that anything can translate between them get fewer and fewer. Another metaphor: You wrote a blog, I read it and am replying. We both understand English, and there's only so many ways that we can communicate these ideas back and forth. A letter, a book, mail, email, an oral conversation. If someone introduces you to Twitter, you can understand that it's just another way to communicate with the constraint that a given communication is limited to 140 characters. Pretty simple to comprehend, and exploring that constraint leads to interesting insights. Same thing here, you can write HTML that represents the DOM, you can write code that emits HTML that represents the DOM, you can write JavaScript that uses the browser API's to build the DOM, you can write another language like Elm, which can be compiled into JavaScript to create the DOM, you can use React which gives your JavaScript HTML-like syntax to create JavaScript that represents the DOM, but only updates it based on a diff of the current DOM and the new DOM.
As far as how to go about learning these two sides deeply, I've gotten a ton of mileage by writing my own small versions of things. Try writing your own minimal jQuery, your own minimal React or Vue, try writing your own small barely-featured JavaScript interpreter (use an existing parser), these are projects you can do in a weekend (on a good weekend), but that will yield a massive simplification of how you think about and understand things. If you eventually work your way to one of these, then try writing it a second time when you're done to solidify the idea and so you can be shocked by how far you've come!
When I had my OOP class in Computer Science, we were told there are two types of OOP, one based on classes and one of prototypes, but the prototype one isn't spread too wide. Well, the professor didn't count JS as "real" language and so he didn't went into any detail about prototypes and went full on Java and C#.
Then there is the mostly asynchronous nature of JS, the higher order functions, the lambdas, the closures, the monads, the context based "this" and not to forget the crap-load of history over the decades.
I would not consider myself a very smart man and I still "got" JavaScript someday.
Just do it step by step, you don't need everything to get started. Heck, you don't even need everything to get finished, I mean many concepts weren't part of the languages to begin with and still people wrote nice applications with it. :)
The simple reason why JavaScript is so popular is because there is literally no alternative for websites. You HAVE TO run JavaScript to get your website to do things on browsers. And yes, you should learn it.
I personally recommend learning vanilla JavaScript to start with, as otherwise all the other stuff will not make any sense, and afterwards just try to stay away from the hypetrain of all the various tools and frameworks etc.. They're constantly changing and it's not that important to know all of them, learn the ones that you need, when you need them.
However not understanding any limitations and capabilities of the browser clients is going to be a problem for you, so whatever you do you should learn vanilla JavaScript, HTML and CSS.
If later on you feel like you want to get deeper into it, I highly recommend trying out TypeScript. It helps with a lot of issues JavaScript has with building sensible applications, and is a lot more pleasant to work with in general. Additionally it is definitely growing fast and hopefully TypeScript, Kotlin, or some other language that compiles into JavaScript will take the dominant position in the community soon.
One suggestion I have is, if you have learned any functional programming in your studies or work, look into how it applies in JS. JS is, you see, a functional language masquerading as an imperative one. My big breakthrough in understanding came when someone gave me the (simplistic but useful) advice to treat JS as 'LISP with C-like syntax'. IOW, understand functions as first-order data, and start passing them as parameters to functions, etc. Start thinking of polymorphy in mathematical terms rather than OOP terms. Compose rather than inherit to create classes.
I'm also studying CS in the university, and that thing (learning C/C++ Java PHP ...) is pretty common at least where I live, Mexico, I'm in my last semester but already have a Software Engineer job in an e-commerce company, that because I spent plenty of my free time during university coding stuff, and doing subject projects in languages that they did not teach us there, so an advice to you should be: Learn, don't be a "normal guy". I would tell you to not learn JavaScript if you are not going to work in a web environment, but increasing your knowledge is always helpful in some way, I actually started learning JavaScript because I saw a framework for electronics and as that's my hobby I started loving it from there, then I made some research, looking for experienced JS developers, trending technologies in JS, and anything that came to my mind.
So if you have free time nothing better than spending it learning something new, or improving your current knowledge, believe me, doing that helped me to exit a stressful situation in my life, and now that I'll graduate, having a job with a good salary being recent grad is a really good achievement, best of luck man!
One thing you should know is that there are a LOT of ~fancy frameworks~ out there which are designed for this or that functionality which is actually 100% possible in standard basic javascript as well - usually not even that much harder to implement (sometimes even easier), and in almost every one of these cases, the "basic javascript" version will perform MUCH more resource-efficiently. The website vanilla-js.com/ exists to demonstrate this.
The reason is that Javascript (or technically ECMAScript) is an evolving standard which did not support these features when many of these frameworks were first created, but nowadays are supported by all major browsers (yes, even Internet Exploder.)
This might be part of the problem: "I am a normal guy, I don't really code at home, or work on a personal project."
I see this as an indication that you aren't all that interested in programming; those who have a passion for it can't get enough of it. Take a look at how you spend your time at home...what is it that gets you excited, something that you'll work on nonstop until the early hours of the morning? That's your real passion, and following it might make you a happy guy.
I disagree with that.
With your definition of “passion”, and with the advice itself. I think it’s important that your studies and your job are something you like to do, and that do not feel like chores. Wether you make your whole life revolving around it is your choice to make, but I’m old school, I consider variety equals sanity ;)
I have many interests and friends, and only so much time. I am very glad I get to spend my working hours doing something I love, I think I’m even becoming pretty good at it, but work is work and life is… well, life. At the end of the day, I like to let my head rest and focus on other things to have variety.
As to wether I’m passionate about it, well – according to your definition – surely not; I do not have pet projects and I will never ever spend my night on anything that is not an absolute emergency (or astronomy, obviously). That does not mean I’m a sad person at work, or that I’m not all that interested in what I do. I just have varied occupations.
I’ll conclude by highlighting the fact that many companies – at least in France – avoid hiring newbies who make it seem that programming is their only life, because they have a reputation of not fitting in with the team very well (heck, we ourselves have an intern who only ever speaks about his pet programs and a single video game, and boy is it a hassle). This might or might not be related, this talk just made me think about it.
I agree with you rather than Perry. If I'm "not passionate" because I have a relationship and friends and spend time with my coworkers completely divorced from work, then so be it. But I (and those I work with) believe that code should fit into your life, not be your life. Pet projects and after-hours work are great, but they aren't the sole determinant of passion.
I will put it this way: We respect doctors for the work they do. It's highly specialized and takes a long time to learn to do well. Is a doctor less passionate about their field if they leave the hospital and go to dinner and a movie with their spouse? Or to the gym? Or should every waking moment be focused on their job, reading and doing research in their spare time?
A big reason we want doctors to have lives and get sleep is so they don't make mistakes out of fatigue or burnout. Considering developers write the code that runs healthcare systems, banks and websites that individual businesses depend on, does it not make sense to subscribe to the same beliefs with us?
We can keep developers passionate about the field by NOT demanding they be consumed by it. Plus, if all someone can ever bring to the table is coding X, they'll never be able to relate to the people they're writing the code for (and by extension the projects themselves).
Hey, thank you for your advices!
I think I like programming, really, but I don't know, i'm going to the gym 4 times per week and the other days I'm doing my homework. I really feel like I don't have time for a personal project. But you're right, if I loved it that much I could make some times for it, this is why I'm going to learn React (or maybe another framework ?) and start creating something. I already have 2 ideas for a little project which can help me to increase my skills !
I agree with Perry, about the passion. I always find something interesting to do or at least to read about.
As for JS, I've avoided it until now (59 y/o and counting... being a programmer since I was 20).
The approach I took with JS is to use it as a compilation target and focus on Typescript instead. I read so many praises about the language, so I started learning it. It's amazing.
A few more points on JS:
Ok calling JavaScript "fricking fast" or "the new assembler" is simply dishonest and I can't not call you out on this.
Yes, JavaScript is a lot faster than it used to be. Yes, you can do many neat things with it. And yes it is definitely fast enough for a lot of common uses.
However many things are NOT that fast in JavaScript and the single-threaded nature prevents JavaScript from solving a lot of performance problems easily. Additionally MANY languages are much faster than JavaScript and are much more suitable for writing performance critical software.
In my experience for most common use-cases nowadays the performance limitations come from I/O, network, and other such things and the absolute performance of the language (as long as it's fast enough) does not matter much. This means you can write perfectly fine programs in JavaScript, Python, Go, as well as Java (and others) and mostly personal preference and the fit of e.g. various frameworks and libraries available for your needs matters much more than pure performance in benchmarks.
React isn't a framework 😉
Don't learn React, learn the programming principles that React promotes: functional programming, data driven UI development, libraries composition (and composition in general).
Agree 100% with Perry.
I would argue with this. He says he is in college, so I totally understand there is no time for personal projects (I know I had none between school, work and homework).
It is pretty wild, but the fundamentals are still just computer programming and hopefully your employer will be able to help reign in the insanity with good technical direction.
There are a lot of great JavaScript articles on this site. I recommend querying and reading a bunch. Here are a few you might find helpful:
Writing modern JavaScript code
Setting up a Minimal, Yet Useful JavaScript Dev Environment
The JS Path: JavaScript Best Practices
Also @kayis posts a lot of great info on JS.
Good luck!
Hi Ben and thanks for sharing my article It makes me really happy !
I will read all of them since I kinda like how the JS community is so active ! When I see all these articles and tutorials I'm a little more relieved about it
One more thing, you only need ONE job and there are PLENTY of jobs in Java, C, C++, COBOL, PHP.
You are in control of your own career and JavaScript is only eating a bit of the software industry. There is plenty of room for all the languages, personalities, etc.
Becoming a one-trick pony is not very good career advice for people working in IT. There are plenty of one-trick ponies that get replaced by people capable of working in more than one language, and get stuck in dead-end jobs working on maintaining 30 year old software because they thought there are enough jobs for COBOL.
The key is to know vanilla js really well. If you know that, I dont't think it will be hard to switch to frameworks.
Vanilla JS? Never heard about it, I will do some research thanks
I mean a pure js usage, without frameworks etc. Ok, maybe jquery to perform ajax requests, because they're messy, but other things can be done with pure js. Like, creating a component using prototypes and native dom manipulation etc. Just to try it out. Check out this: vanilla-js.com
or rather than jQuery for ajax look at fetch - all the goodness of modern vanilla JS, with a great polyfill, and none of the jQuery bloat :)
You've managed to perfectly illustrate what I truly see as the biggest issue with the way CS is taught and why I would never advise someone that wants to code to spend the time and money on college. To put it succinctly, the neckbeards at Universities are simply too resistant to change and refuse to acknowledge that Javascript has grown up, and they're damning their students because of it. This is a generalization, but I personally never had a professor prove me wrong.
Also, I want to note that "I am a normal guy, I don't really code at home, or work on a personal project," isn't a good sign, IMO. Granted, most personal projects most people would have any interest in are going to be web-based, and that means Javascript. Personal projects are where you learn the most, and if you're not coding at home, you don't love it, and if you don't love it, there is a greater than likely chance you will burn out. In all honesty, if you don't develop in your off time, I'm hesitant to call you a developer at all. Perhaps that's harsh and I'm just a zealot, but alas.
With that out of the way, check out YDKJS. It's arguably the best, most comprehensive JS guide online. Then, once you've got the basics of JS down, React is the way to go. The community is huge, documentation plentiful, and the ecosystem is an absolute joy to work in.
github.com/getify/You-Dont-Know-JS
The issue is that HR/recruiters still mostly expect people to have degrees. Most of the time your application will just end up in the garbage bin for not having a degree. This process might even be automated in many places. Beyond that there is a bias towards degrees from specific institutions. It doesn't make much sense on a technical level, but that's just how it is here in the US. There was a point in time that I was considering dropping out of school, because I was making extremely good money coding. It was my boss actually that convinced me to stay in school. After going through a couple rounds of job searching and seeing how tough it can be even with qualifications, I'm really glad that I had that voice in my ear telling me to stick with it.
I'm US based, and never finished school. I think you'd be genuinely surprised what a healthy GitHub account attached to your LinkedIn can do. Degrees seem to be a stopgap for having actual code published. In my experience, once you've published even a small amount of usable, well documented code, they're pretty willing to overlook the degree. My LinkedIn is a joke when it comes to "professionalism," yet I've been bombarded with recruiter emails since linking my GH, even when I only had a small number of projects. It does make that first contact harder to establish though, I will admit that.
Establishing a reputation on StackOverflow and HackerRank can aid a LOT as well.
With all due respect, being bombarded by recruiters on LinkedIn and actually getting the job you want are two entirely different things. I'm glad things seem to be working out for you though.
This is very true. I don't want to seem like an advocate for dropping out, or like college is entirely pointless. Rather, pointing out that I think much of what is taught is antiquated with regards to most of the jobs on the market.
At the end of they day, what it takes for you to learn the skills and get code published is the path you should take. For some, myself included, college wasn't it. If you're the type of person that functions better in a self taught environment, diving head first into open source and contributing wherever possible can work. IMO it's one of the things that makes this field great. The path you take is less important than the fact that you get there.
For the sake of completeness, I want to note that pretty much all of what I've said could very well be exclusive to the web. It's my niche, and in all honesty I don't stray far because it's what I love. The rise of coding bootcamps, and even projects like FreeCodeCamp, seem to have liberated web development from the traditional CS model.
I agree entirely. College is overrated and generally poor at actually teaching vocational skills. Hopefully people will eventually catch onto the fact that an undergrad liberal arts education isn't all it's cracked up to be, but I still recommend people get degrees for the time being.
I never finished school (I stopped at half of high school), because my informatics and systems teacher gave me an F as final valuation in both the matters. Looked like programming stuff wasn't my destiny at all.
You know what? I worked for 3 USA startups in the past 5 years, the one I'm working for now was in the 2017 CNBC Disruptor 50 companies.
At work I am one of the most performant developers and my (graduated) teammates seek for my advices often.
I get at least a (serious) job offer each 1/2 weeks and nobody ever complained about my lack of school degree (except for when they want me to relocate to the USA and I can't because your laws suck).
School, for programmers, is a huge waste of time.
If you can afford to waste all that time then good for you, carry on and get your piece of paper.
If you want to get a job and start producing stuff, just prove your skills creating some cool projects on GitHub and the rest will come.
I'm not sure if React and Symfony (a PHP web framework) is a good combination. With the modern JS frameworks (React, Angular etc.) server based web frameworks seems to be dead, at least for new projects. If I were you I'd choose another language for the business layer (Python, Kotlin etc.) instead of PHP.
To throw in my $0.02, Sails.js and Trails.js have very low barriers to entry and allow you to build a JSON API almost mindlessly. Plus, then you're in the magical world of full-stack javascript, and server-side rendering and other isomorphic patterns are only a Google and StackOverflow away.
Why do you think symfony is dead? Symfony along with Laravel are two of the most popular php frameworks. React and Symfony makes a great combination. As a matter of fact, symfony has support for react with symfony webpack encore component. Webpack Encore is a simpler way to integrate Webpack into your application. It wraps Webpack, giving you a clean & powerful API for bundling JavaScript modules, pre-processing CSS & JS and compiling and minifying assets. Encore gives you professional asset system that's a delight to use.
I didn't say that. I said web frameworks in general, language agnostic. If all the view/controller processig is moved to the browser and the server simply serves REST services many functionalities of the framework are not used. I'm thinking about Struts, JSF, Spring MVC. I don't know the PHP world, maybe its frameworks do different things but I doubt it.
You are entitled to your own preferences of course, but the idea that the client/server model is dead is simply not true... Traditional frameworks have become very good at serving APIs.
cough cough GraphQL cough cougghhh
What about it?
When I was a student in France 10 years ago JavaScript wasn't taught. We were learning low level procedural languages and OOP languages (mostly Java). Where I was, teachers / researchers probably didn't call JS a language. I only got exposure to functional programming later. Is it still much the case?
Oui ! It's still the case, like I said it's all about C++/Java
Nice post/discussion you started here! Definitely going to read all the suggestions the community commented here.
First of all, let me tell you that I know how you feel: I did Java, C/C++ and others in college and then discovered the JavaScript ecosystem just like you. To be honest I recently started learning React too, but you seem to be doing pretty well so don't be scared.
On the other hand, an internship doesn't define your whole career and, as Ben said, there are plenty of jobs in those other languages if the JS family doesn't suit you or you end up not liking it, so don't worry.
I understand how you feel. I'm kind of going through the same thing.
Way back in 2012 or so, I was really starting to learn programming and I fell in love with JS. The only real frameworks or libraries I knew about were JQuery and... that's it.
After finishing a few projects and having felt like I really understood Javascript, I started learning Ruby on Rails, and Javascript fell out of my view. I woke up four years later, in 2016, bored with Rails and realizing that my love, Javascript, was too good for me now. I didn't understand any of the frameworks or what was so special about them. There were so many different things to learn about: the tooling, the linting, the webpack-ing, the components, the arrow functions!
I've started to reconcile with Javascript a little bit. I've made my way through an Angular 2 tutorial (which is in TypeScript rather than Javascript, incidentally), but we aren't best friends anymore, and I don't use Javascript often, if at all anymore. I write lots of Java for my Computer Science classes and lots of Python for my job.
Anyways, I would say it's not a waste to learn vanilla/native/pure Javascript (Javascript without any frameworks or other tools). Javascript is, above all, a fun language. It's dynamic and flexible and helped me understand basic programming paradigms. But if you already have a strong background in programming (you've said you know lots of different languages), Javascript isn't a necessity. You can do great things all the while completely ignoring it. Don't feel like you have to get a Javascript job or know even a smidgen of it.
oh! one more thing: use the documentation on mozilla developer network (developer.mozilla.org/en-US/) for anything you need to know. it's WAY better than w3schools. and they have good tutorials.
There is a Chrome extension to exclude W3Schools from search results, and I highly recommend it. The information on there is usually outdated, or just flat out wrong.
MDN really is the definitive source for JS.
Nice article. This summarize the fear I had back in my days of 3rd year as a Computer Science student (2007, I guess). That was a time of plenty 'revolutionary' java Web frameworks, and I knew none of them.
I think this is a technology dilemma that will never end: there is always a 'sexy' technology that everybody talks. And here is my advise: focus on learning the programming paradigms and the benefits of them, not just frameworks. If you are learning different languages, as you said, you are already in the right path, I think. The best job offer is the one which takes you as a programmer, and not as a framework specialist, so, for you will be a matter of time.
So you was in the exact same situation, and I think you are absolutely right, even if I don't know JS (yet!) If I'm good at programming I will find something interesting.
I was in the same boat a year ago! University thought basic programming and applied theories on C/C++,Java. As A student, HTML/JS sounds like kids work because we had those even back in highschool so no one really used JS to build their school projects.
I had to learn Angular 1 last year to actually be useful to the company business. I use some of my free time to checkout React and Angular 4. One day, I will read ECMAScript documentation to the heart! maybe.
Don't fear javascript. It has gained a lot of (IMHO) undeserved hate, just by people pretending/forcing it to be more like other languages instead of embracing the simplicity and power that it has. You can do almost anything in JS fairly well from web, desktop, mobile, games to drones. Also, people don't like all those boiling frameworks and tools but I sincerely love the fact that is a language always improving and with lots of things to do. If Netflix can run full JS, almost any idea you'll think could.
What was really frightening was 10 years ago and maintaining JS code for the %$`$ IE6 (ie6death.com/). Now things are getting better so don't be afraid! :)
Don't worry too much about feeling a Junior when you're just a 3rd year. The more you know, the more you see you need to know. In a vast sea of Software Development, it's much more important to get the main principles first. Afterward, you can pretty much adjust to any new language/framework in a reasonable time - provided you understand the basics. (Maybe switching from object oriented to functional can be slightly more challenging since it requires a different approach but it's still same ol' programming.) The technology changes so fast that when you finally start working there may be completely different frontend framework or technology worth learning, so it's better to fully understand the language. When you'll understand JavaScript properly there's a short way to understanding other JS based technologies/frameworks.
i love javascript. and yes, there are a billion or more frameworks to pick... but start off with learning just the plain javascript before tackling the other frameworks. it's a lot like going straight to mindstorm lego before playing with duplo. hahaha!!
but seriously, javascript has se seriously quirky features, but as soon as you get thise figured out, you'll be able help anyone with "this". :)
i'm currently watching a video lecture series on nodejs by a guy called anthony alicea (on udemy) and he's really explaining the javascript fundamentals well. he does a course on plain js as well (understanding the weird parts) and i've liked the few videos i've seen.
tl;dr:
my suggestion: learn plain javascript and once you can make loops and popups and do stuff with the webpage, go for jquery. it's a really great framework and is still in use a lot (we use it at work - a decision they made because everyone knows it).
good luck!
I would actually recommend starting with jQuery because it's relatively easy to use, does not require a complex build system, and its effects on the browser DOM are predictable and observable without special tooling. From there work on performing DOM operations with less and less reliance on jQuery. A site called "You might not need jQuery", a site called "Can i use", and the MDN javascript reference should help a lot. Frameworks like React and Angular are powerful, but also kind of magical so it's difficult to tell what exactly they are doing. I wouldn't discourage you from learning these frameworks, but I also don't consider knowing how to use them to be quite the same as understanding javascript.
Please don't work your up from jQuery, jQuery abstracts out a lot of good things that are important for beginners developers to learn in order to understand good design patterns of JavaScript.
Doing this, will only make you more comfortable with anti patterns of JavaScript such as using a lot of iife, like in
$(document).ready
functionReact is also a salad of anti-patterns reminiscent of early 90s PHP spaghetti code. Inline XML, seriously? I would argue that jQuery is a pretty solid DOM toolkit and a no-nonsense way to introduce oneself to, ahem, the actual DOM.
I agree with the suggestion to study up on non framework JavaScript as the language is different from others. I'm in a similar boat as a junior developer trying to learn angular, but I love working on side projects and find that can really help build knowledge quickly. Best of luck!
Hi, Harvey! I get that each of the things you can learn probably feels like a whole new thing, each equally difficult and painful, but let me propose as an alternative, that you can see them as slightly different takes on the same thing. As a metaphor, each (fiction) book you read has a whole new story and whole new characters, but the core part of translating the characters into words and making sense of them is the same, and the part where there's a story is the same, and they all have characters, who probably have some sort of conflict. So the next book isn't the same as the first book, you don't have to learn to read again, you aren't experiencing a plot for the first time. Same thing here, they're all JavaScript at the end of the day (though some of them, JSX, for example, have some fancy ways that they display that JavaScript). If they're web view frameworks, they all have some way to turn the JavaScript into a DOM, probably via HTLM. They all have some way to respond to events and cause the DOM to update. So while the details change, and even the language changes, it's never as big as that first language, or that first framework. And as you learn more of them, you're exposed to more variations and more ideas, so the number of ways that any future one can vary become smaller and smaller. At some point, you've seen so many of them, that you can sort of go into a new one, study an example for a minute or two, and see how it's the same as what you already know and the handful of ways that it differs -- the parts that make it interesting.
One thing that will make this easier is if you understand the two sides very thoroughly. On the one side, you have JavaScript, on the other, you have the browser and its DOM. It's worth investing time to become comfortable in these things, because all the frameworks are translations between the two, when you understand them, then the ways that anything can translate between them get fewer and fewer. Another metaphor: You wrote a blog, I read it and am replying. We both understand English, and there's only so many ways that we can communicate these ideas back and forth. A letter, a book, mail, email, an oral conversation. If someone introduces you to Twitter, you can understand that it's just another way to communicate with the constraint that a given communication is limited to 140 characters. Pretty simple to comprehend, and exploring that constraint leads to interesting insights. Same thing here, you can write HTML that represents the DOM, you can write code that emits HTML that represents the DOM, you can write JavaScript that uses the browser API's to build the DOM, you can write another language like Elm, which can be compiled into JavaScript to create the DOM, you can use React which gives your JavaScript HTML-like syntax to create JavaScript that represents the DOM, but only updates it based on a diff of the current DOM and the new DOM.
As far as how to go about learning these two sides deeply, I've gotten a ton of mileage by writing my own small versions of things. Try writing your own minimal jQuery, your own minimal React or Vue, try writing your own small barely-featured JavaScript interpreter (use an existing parser), these are projects you can do in a weekend (on a good weekend), but that will yield a massive simplification of how you think about and understand things. If you eventually work your way to one of these, then try writing it a second time when you're done to solidify the idea and so you can be shocked by how far you've come!
Yes, JavaScript can be scary.
When I had my OOP class in Computer Science, we were told there are two types of OOP, one based on classes and one of prototypes, but the prototype one isn't spread too wide. Well, the professor didn't count JS as "real" language and so he didn't went into any detail about prototypes and went full on Java and C#.
Then there is the mostly asynchronous nature of JS, the higher order functions, the lambdas, the closures, the monads, the context based "this" and not to forget the crap-load of history over the decades.
I would not consider myself a very smart man and I still "got" JavaScript someday.
Just do it step by step, you don't need everything to get started. Heck, you don't even need everything to get finished, I mean many concepts weren't part of the languages to begin with and still people wrote nice applications with it. :)
The simple reason why JavaScript is so popular is because there is literally no alternative for websites. You HAVE TO run JavaScript to get your website to do things on browsers. And yes, you should learn it.
I personally recommend learning vanilla JavaScript to start with, as otherwise all the other stuff will not make any sense, and afterwards just try to stay away from the hypetrain of all the various tools and frameworks etc.. They're constantly changing and it's not that important to know all of them, learn the ones that you need, when you need them.
However not understanding any limitations and capabilities of the browser clients is going to be a problem for you, so whatever you do you should learn vanilla JavaScript, HTML and CSS.
If later on you feel like you want to get deeper into it, I highly recommend trying out TypeScript. It helps with a lot of issues JavaScript has with building sensible applications, and is a lot more pleasant to work with in general. Additionally it is definitely growing fast and hopefully TypeScript, Kotlin, or some other language that compiles into JavaScript will take the dominant position in the community soon.
All you have to fear is fear itself.
One suggestion I have is, if you have learned any functional programming in your studies or work, look into how it applies in JS. JS is, you see, a functional language masquerading as an imperative one. My big breakthrough in understanding came when someone gave me the (simplistic but useful) advice to treat JS as 'LISP with C-like syntax'. IOW, understand functions as first-order data, and start passing them as parameters to functions, etc. Start thinking of polymorphy in mathematical terms rather than OOP terms. Compose rather than inherit to create classes.
And read/watch a lot of good tutorials. I can recommend MPJ's FunFunFunction series on YouTube. Here's a link to a playlist of JavaScript functional programming vids.
I'm also studying CS in the university, and that thing (learning C/C++ Java PHP ...) is pretty common at least where I live, Mexico, I'm in my last semester but already have a Software Engineer job in an e-commerce company, that because I spent plenty of my free time during university coding stuff, and doing subject projects in languages that they did not teach us there, so an advice to you should be: Learn, don't be a "normal guy". I would tell you to not learn JavaScript if you are not going to work in a web environment, but increasing your knowledge is always helpful in some way, I actually started learning JavaScript because I saw a framework for electronics and as that's my hobby I started loving it from there, then I made some research, looking for experienced JS developers, trending technologies in JS, and anything that came to my mind.
So if you have free time nothing better than spending it learning something new, or improving your current knowledge, believe me, doing that helped me to exit a stressful situation in my life, and now that I'll graduate, having a job with a good salary being recent grad is a really good achievement, best of luck man!
One thing you should know is that there are a LOT of ~fancy frameworks~ out there which are designed for this or that functionality which is actually 100% possible in standard basic javascript as well - usually not even that much harder to implement (sometimes even easier), and in almost every one of these cases, the "basic javascript" version will perform MUCH more resource-efficiently. The website vanilla-js.com/ exists to demonstrate this.
The reason is that Javascript (or technically ECMAScript) is an evolving standard which did not support these features when many of these frameworks were first created, but nowadays are supported by all major browsers (yes, even Internet Exploder.)
Only use a framework when you actually need it.
You are a Escobar. You will be fine ;-)
It's never a waste of time taking in the native/core/vanilla/"basics" of anything, really.
I recommend you to learn the functional paradigm too...pure functions, immutable data, etc. and how to do it with JS.
Every now and then I find myself returning to this: Programming with Anthony youtu.be/a1tPbfu-fLY