Building the Programmer’s Mentality

Coding has become increasingly popular in recent years, as more people see that the future will be dominated by technology. Since it seems that technology will inevitably wipe out some traditional jobs, it is natural for people to switch careers to become programmers/developers. Switching fields has never been easy, but it’s especially difficult for traditional workers to become developers. More often than not, this difficulty is not resulted from the difference in intelligence — although many people believe so — from my point of view though, it is caused by the fact that newcomers are so frustrated by all the jargon, lack of guidance from experienced developers (also the lack of developers who are actually good at guiding newbies and willing to do so in this world), and the abundance of seemingly sage advice all over the Internet.
This article is not intended to be the paradigm of starting guides, but instead my two cents on the mindset as a front-end developer with almost 3 years of experience in this crazily-fast-evolving web development environment. In this article, I would like to emphasize how to deal with the emotions and overwhelming feelings that come along with learning programming, more than the actual approach to learn, since most articles out there are telling you how to learn web development in 30 days or so, and I find the web is in need of some articles that provide emotional support for programming beginners.
Why would a programming beginner be intimidated?
There are many moments that would be scary to a total beginner. I dare say actually 99.99% beginners would be intimidated in their first hour of programming, because with the more open-source-friendly environment, coding in any language comes with a set of open-source dependencies that you have to learn on top of the language. In my opinion, the 2018 web development world is just like 20 people trying to cook a plate of spaghetti on one pan. Why? Let me elaborate using the front-end web development ecosystem.
I will count all the front-end terms that I can immediately think of:
HTML, CSS, JavaScript (these 3 of course), Sass, SCSS, Less, (yes they are more or less the same thing but beginners are confused and wouldn’t know), PostCSS, Pug (old Jade), Material Design, TweenMax/GSAP, Three.js,WebGL, font icons, sprites, Bootstrap, Handlebars, templating engine, MVC, MVVM, functional programming, WebAssembly, AngularJS, TypeScript, React, Redux, Flux, JSX, Vue.js, Preact, jQuery (well although there’s rarely a team using it to start a new, decent project, but it’s still a starting point for beginners), Sketch, InVision, Webpack, Gulp, Grunt, npm, pnpm, yarn, bower, text editor, Atom, Visual Studio Code, Sublime, Firebase, Heroku, node.js (yes I know this is back-end but it’s impossible to not hear of it when you work on front-end), RESTful API, MEAN stack (I will skip mentioning the databases…), framework, library, module bundler, pre-processor, package, plugin, stack, package manager, version control, git, github, bitbucket, SVN, CMS (yes not really a tool for us but you cannot avoid it if the project scale is larger than a landing page), CRM (same as CMS’s case), unit test, Karma, Jasmine, non-blocking script, parser, task runner….
The list can go on infinitely. Serious, WTF front-end web developers?! I don’t even know how I can remember this list of stuff in my head. And these are just the terms of the tools that we use, there are even so much more to memorize in the way we code with HTML, CSS, and JavaScript. So so so much more to memorize in the way we use the API of each framework/library. So many new updates on the syntax in the actual JavaScript language every year, oh and updates on the APIs of the frameworks we use, and there may be a better library or framework than the current one you are using introduced to the front-end world every now and then, probably 3 months, so as a good front-end developer who wants to explore the options so as to use a better stack of tools in our projects, we have to learn the new technologies, at least to the point that we understand what the framework/library/tool is doing, how it is different from the current ones, and the pros and the cons of using it over a similar one, if not deeply involved.
To actually deliver a project, these are almost unavoidable for most languages: OS + package manager + compiler + text editor + libraries + simulator
As a beginner, with 0 knowledge of the programming language itself, knowing that learning to code means learning the language plus all these tools, it is overwhelming, it is extremely overwhelming. It is natural for someone who wants to learn programming to feel stressful, lost, hopeless, and may want to give up.
So, what advice would I give to a beginner?
- Learn the language with the simplest setup possible.
If you are learning web development, search on the Internet for some online tutorials that you don’t have to set up anything. If you are learning C++, just get a C++ compiler (online or Visual Studio). Skipping the setup for the development environment not only saves your time, but also reduces the chance of facing obstacles before you get your hands dirty on the language, which would create less stress, because setting up the development environment even by experienced developers can be time-consuming and frustrating. It would very likely discourage a beginner to start learning programming at all. - If you have to work on a project with a library, read the documentations carefully.
Pay special attention to the APIs you have to use. Read thoroughly the pages for those APIs and do not skip a single line. There are always links to other useful pages on some unnoticeable areas. I must say that most developers are not good at, or do not care about writing documentations at all. If there is any documentation, you must read the parts relevant to you. All. Of. It. - If you face a problem that is not related to the syntax, try to solve it by yourself first, at least for 15 minutes. If it is still not solved yet after 15 mins, search it and browse StackOverflow.
Programming is about solving problems. If you decide to look for help immediately whenever you face a problem instead of trying to solve it by yourself, you will never be a good programmer. - Be patient. Understand that you may not solve some issues within a day.
When you program, you are creating and building. Rome wasn’t built in a day, my dear. Do not be frustrated if you cannot solve everything immediately, because it is normal. No matter how smart you are, it takes time to build. And since you are human, when you build, it is normal to make mistakes. Spend more time on it, get it right, and build a steady castle. It’s way better than having built a castle quickly which ultimately falls after a day. - Accept that you don’t know about some things, and do not feel guilty about not knowing.
You must know that you will never know everything in your field, so it’s okay to not know something that your fellow programmers tell you, because once you get into this industry, you are destined to be learning new things every single day. - It is totally fine to ask for help, but learn how to ask for help before actually asking.
When you have a problem that you need help, you should try different available approaches first. When you ask for help, tell the person/write on the post that you tried A with the specifications B on the environment C and with the condition D, where you got the outcome E. Describe your problem in necessary details but not with useless information. Make sure there are no available threads online (e.g. existing answered StackOverflow post) that could help you before asking for the help, otherwise you will disappoint the person who wants to help because a good developer/programmer should be good at (or at least attempt to be goot at) searching for available/existing solutions. - Do not compare yourself with others.
Everyone learns differently, and at a different pace. Do not compare. If you compare yourself with others, you will always find someone who seems to be better at doing what you are doing than you, and it may hurt your confidence when you are still not sure about your programming ability. - Be tenacious. Keep coding. Keep learning.
If you decide you want to be a developer/programmer, keep coding. As long as you keep learning, you will be somewhat good at it. You do not have to be the programming rockstar the world has never seen before. Set a goal, work hard, and you will eventually achieve it. At the end of the day, the reason for choosing to be a programmer should not only be the money or career prospect, but should be your love for programming and problem solving.
That’s all for now, my dear wannabe or already-are programmers.
I love coding so much, and I hope you do too.
Here’s my motto:
Je code, donc je suis. ʕ•ᴥ•ʔ
(Because I am a girl who likes to look cute, so I must include the bear emoji at the end of the sentence.)
Fionna Chan, Front-end Web Developer.