As a follow up to my blogging question and answer post, I asked new coders for their questions, and I will be answering some of them here!
When should I start making projects?
As soon as possible! When you know the fundamentals of a language, you can start putting those things together to build something small. And, if you have an idea in mind, that can help guide you to learn even more things. You can build a lot of small command line games after knowing just the fundamentals of a language. You can build even cooler things with the fundamentals of web development!
What is the most important skill a dev should have?
If I were to pick one thing, it would be the ability to teach yourself new things effectively and efficiently. You're going to be constantly growing and picking up new technologies as a developer. The ability to do that is more important than any individual tool or technology.
How do JavaScript arguments work?
Quick jargon breakdown before I start:
Arguments - passed into a function each time you call (aka invoke) it.
Parameters - the variables in the function definition.
In function myFunction(x, y)
, x and y are the parameters. When we invoke that function by running myFunction(1, 3)
, 1 and 3 are the arguments.
When I teach functions, I try to teach them in two ways in order to make sense to two different types of thinkers. The first is a reusable chunk of code that you can plug values into to make your code more versatile and allow for less repeated code. In this case, arguments are the "dynamic" pieces of information that are plugged into the chunk of code. So, when you call the function, that value may change. Pretty much a variable that is different each time you run the function.
I also like explaining functions as a series of inputs and outputs -- kind of like a little machine. You put something into the machine and something comes out based on that. The arguments are the things you are feeding into the machine, and the return value is what is outputted. This matches the algebraic definition of functions more closely -- if you remember f(x) = 2x + 1
from school math, those are functions just written on paper instead of written programmatically.
In JavaScript, the order of the arguments being passed into the function corresponds to the order of the parameters in the function declaration. So, if my function declaration looks like function add(x, y)
and I then call the function with add(1, 2)
, in the function 1 will be x
and 2 will be y
. If I instead ran add(100, 50)
, x
will be 100 and y
will be 50. Since x
is my first parameter, the first argument I pass into the function will be x
, and since y
is second, the second value I pass will be y
. Sometimes it's helpful to diagram this out.
function subtract(x, y) {
return x - y
}
add(5, 2) // 3, 5 is x, 2 is y
add(200, 50) // 150, 200 is x, 50 is y
add(20, 70) // -50, 20 is x, 70 is y
x | y | subtract(x, y) |
---|---|---|
5 | 2 | 3 |
200 | 50 | 150 |
20 | 70 | -50 |
Which languages do you consider important having good working knowledge of.
I think that this is super skillset specific. I can speak most to data science and web development since that's where I've spent my career. For data science, I would say Python and R are the pillars right now, I would know at least one of these. For web development, HTML/CSS/JavaScript are the only ones you need. You can build anything in JavaScript at this point -- it's by far the most versatile language.
How to keep going when people in tech tell you not to?
also hopefully helps for people asking about imposter's syndrome!
This is something I still deal with, and I don't have a perfect answer. I actually quit coding in college because I thought I wasn't good enough, and dealing with people saying rude things to me is a struggle that often makes me think about transitioning careers. But, I try to keep thinking about the things that keep me in tech. The upward mobility it allows, the awesome people I've met, the cool things I've built. Those make it worth it, despite the hard parts. I think about how much those people are hurting to be so hurtful to others, and how they must feel threatened by other people -- which doesn't come from a secure place. Both sides lack confidence, it's just expressed much more harmfully on their end.
I also keep a document tracking my wins: cool things I've built, positive feedback from people, accomplishments I've had. Then, on hard days, I can go back to that document and remind myself of the cool things I've done.
How to get better with programming logic and solving problems?
Quite a few tweets here!
This is a topic I could go on about forever, I am actually making a course on this exact topic. Stay tuned for more there. Sorry that I don't have a great concise answer, but it's mostly about thinking abstractly and breaking problems into smaller ones.
Moving Past Tutorials: a course on problem solving for programmers
Ali Spittel γ» Feb 18 '19
How to learn to code for free?
I got a bunch of my favorite resources for you!
My Favorite Free Resources for New Programmers
Ali Spittel γ» Aug 13 '18
Where/who can I ask about problems? How long will it take to learn?
You can also ask here on Dev.to, Twitter, or another question/answer site! I would also join Slack groups in your area, or the CodeNewbie one if you want to ask a little more privately. Or, participate in the forums for where you're learning to code.
As far as timelines, it's super different for everyone. Remember that a lot of people spend four years of fulltime work or even longer learning to get a CS degree. You can accelerate that timeline, but I think that the "I learned to code in a week and make a million dollars" success stories are the exceptions not the rules. It may take some time, and that's okay!
How much experience do I need before learning Git and GitHub?
You don't need any! I've taught totally non-technical people Git and GitHub for business and design use. This is a great resource for learning more about GitHub!
Which programming language should I learn first?
In my admittedly biased opinion, JavaScript or Python. Python's syntax is great for new programmers and is a super versatile language. JavaScript is essential for building websites and you can build tangible things with it more quickly than with other languages.
How to remember stuff?
I don't try and memorize syntactical or language specific things. Those can be looked up, or I can use my text editor to help me. The important concepts are the conceptual ones, and in that case I would focus on understanding more than memorization!
What projects to build?
I think games are always fun! I also think this is a great blog post on things to build! Or try to recreate stuff you've seen online.
I hope this post was helpful, if you liked it, let me know or leave a question below and I can do another post like this!
Top comments (16)
It's a great post Ali! I'm sure you already know what's my favorite answer eheh:
π₯³ππ₯
ps. there's a small typo in the table, you put a 10 instead of a 2 in the first row.
Great catch! Thank you!
nice post again! waiting for your course so that I can refer ppl to that - many learning forums have beginners asking how to proceed from basics, what to code, etc
I have some links as well related to that
also, heads up - you've got
add
andsubtract
mixed up in function showcaseLongterm in your career, you'll need to know C, and you'll want to learn a logic language (Prolog), a functional language (Haskell, ML, Clean, Miranda), a code generation system (Lisp or EMF), and a concatenative language (Forth, Factor, Postscript). That's over the course of a decade or more, though.
I agree with every other comment I've seen here except this one.
There's no reason for anyone to ever have to learn everything (or anything) you've listed here. Telling a budding developer that these things are "need to know" is setting them up for failure.
In your milieu that may be true. In mine, it is not.
How much experience do I need before learning Git and GitHub?
You had a great answer for that question.
New developers should put their first projects on Github. No reason not to. There are five commands you need to know to manage your own git hub. Five. Init, status, add, commit, push. You do the last 4 in that order about 99% of the time, and github gives you the special commands you need to set up with them as the remote.
The rest of git? Not necessary with small projects unless you're in a team. Maybe branching. Most of Git's complexity only arises in large team projects.
Though it wouldn't be a bad idea for new programmers to at least familiarize themselves with the concept of the feature branch git work flow and other patterns, because it'll be something akin to what they'll do in a real job.
I might add don't be afraid of the command prompt. Get out of those shiny IDEs and get your hands dirty navigating around and using programs. It's both enlightening and rewarding, plus you'll look like a 90's hacker. π I think git was the first thing I learned how to use via command line.
I don't agree with you, working with IDE made my days 30% more efficient, git, jira, virtual env everything what I need is there.
It was great! thanks. I didn't take part in your QA session but thank God I can ask a question here. My question is how did you if you ever did or how would you advise mixing practice of software development skills through projects as a way to get better at it and doing coding challenges as a way to think better as a programmer and for technical interview preparation when they come. I would be glad if your answer has a method and a time frame in terms of how often you will do each, cause for me doing one always seems to take away attention to the other, meanwhile I think I need both.
Great article, with many great little hints that prove to be important in succeeding in this career. Well done!
Great post as always Ali. The free resources will be invaluable to alot of readers!
@aspittel you mis-typed 10 instead of 2 in the subtract table
Hi,
I have a question. What is the best way to organize good posts like this across the internet? Because bookmarking is not helping me.
Have you tried services like Pocket ? They are a social bookmarking system, with search, a snippet of the text and a preview. You can create categories, like standard bookmarks, you can tag stuff and so on.
Alternatives are Instapaper or Pinboard.
Keep in mind that search is usually in the paid tier of these services.
After looking into your suggestions, I've decided to use pocket as it fits my needs. I never knew social bookmarking systems were a thing. Thanks βΊ