

Want to Learn to Code? Start Small and Have Fun - fks
http://www.fredkschott.com/post/46872399470/want-to-learn-to-code-start-small-have-fun-thats

======
iagomr
I have been learning by myself for the past year, and if I may, let me share a
few thoughts gathered along the way:

\- This will never be “2 months, and I'll build next Facebook”. Consider that
this is a field of knowledge that is exponentially evolving every year, and
you will need years before you are comfortable with it. Learning code or
computer science is a long term decision, and you should go for it if you
really see yourself doing it as a hobby. If you are not up for it, better
learn web design or something that relies less on programming;

\- Following my previous point, start by learning the basics of computer
science. You will not understand the abstract concepts, or know what you are
doing before you have the theory basis behind it – You will get unmotivated
faster. How fun is it to play a guitar without knowing music theory? There are
dozens of ways to learn CS, and I personally find the CS50x class from EdX the
best source to start;

\- If you don't like math, well.. start liking it! Part of the enjoyment of
programming is the satisfaction you get from solving problems. Read books
about algorithms and/or take the online classes in Coursera or Udacity. Also
make Project Euler as a daily visit, and try to solve several challenges per
week;

\- Again, start small, and go small every step. Make a structured plan of what
you want to learn, such as "Monday I study Python, Tuesday for Algorithms,
Wednesday for CS..". Take advantage of dozens of courses available in
Coursera, Udacidy and EdX.

\- Part of learning anything is making yourself motivated along the way. You
should study at least 10h per week (I work full-time and I never study less
than that) and make your successes visible, such as placing a post-it with
every online course you completed in a wall;

Btw, I studied Economics for 5 years and I am 24. Even if you are older, never
fall in the excuse that you are too old or it's too late. That's your "I am
afraid to fail" thoughts. You don't have any pressure, no one is asking you to
develop a whole new Microsoft.

------
datadiver
It is sad that after 20 years of MVC and the 10 years of it on the Web, we are
still telling people that to start coding they need to start with HTML, CSS
and JavaScript. And I agree with you, this is the place to start today. Yet it
is pathetic, that is unless we want to keep the coding just to ourselves, like
the doctors do with their field. I recently listened to a presentation on
Grails. Honestly wanted to grok it fast. Mind you, I have been a Java
developer since it first came out around 1996. No disrespect to the framework
itself, but all those extra concepts you need to shove into your head before
you even begin to code, this is atrocious.

Out of this resentment I and a couple friends set out to build an MVC system
where newbies start with the models (backbone.js) by creating them on a
smartphone using only their browser. And once you are done, the app goes live.
See it at <http://urbien.com> and its open sourced client at
<http://github.com/urbien/urbini>

Laying out the main concepts of your future app, and connecting them is not
easy for noobs. Hack, even for developers sometimes it is a bit of a puzzle.
You need to scratch your head a couple of times when you make the domain model
for a new app. But at least this is all you need to do to get the app running
with our system.

Afterwards you can start tinkering and tweaking, by changing themes, images,
modifying the underlying templates (HTML) in-place, and connecting apps IFTTT-
style, with a tiny plug script.

Would you like to review and may be even help us make the design friendly to
geeks-who-can't-code?

------
cdrux
I find all of these learn to code posts very interesting. I would consider
myself to be a beginner coder even though over the years I have spent time
learning or trying to learn C++, HTML, CSS, Javascript, Node.js, jQuery,
Objective-C, Python, Ruby and others. For each language I had a different
reason for wanting to learn, generally it amounted to wanting to build
something and trying my best to learn the pieces necessary to start.

The key thing that ties all of my different attempts to learn together, and
why I still consider myself to be a beginner is that I always stopped short of
achieving my goal. Generally this was due to hitting some sort of blockage
that I couldn't figure out how to get past, or generally getting bored with
the slow learning process.

Both of these recent articles have really resonated with me, as I have
personally struggled with Codecademy (currently 66% done code year), and I
regularly bite off more than I can chew. I like the suggestion of finding a
mentor and putting my head down, as well as focusing on small projects that
build off of each other.

In the end, I really want to learn how to code, but so far I haven't found a
method that sticks. Maybe that says I don't really want it, but to me it says
there isn't a great learning method out there for me yet. So while Codecademy
is great and all, I really think there is still a hole in the market. Figuring
out how to fill it is the key.

~~~
akg_67
Your reply remind me of the situation I was in little over a year ago. Based
on my own experiences going through trying to learn to code, a few comments:

"In the end, I really want to learn how to code"

No, in the end you want to learn how to solve problems.

If you start with a problem and try to learn the minimal of whatever coding/
language/ package/ software is required to solve the problem, you will be much
further ahead. At this stage, don't worry about being efficient or writing the
best code. Now, I laugh at the SQL queries that I wrote a year ago but they
did solve the problem. Over time, I learnt to write much better queries.

"I always stopped short of achieving my goal"

This is because it was your goal and on not achieving the goal you gave
yourself a pass. You will be better off solving a problem for someone else for
whom you care and you will be embarrassed if you didn't solve the problem,
like for your spouse, kids, parents, siblings, friends, coworkers, boss,
neighbor. Also, achieving small victories are important for continued
interest.

Little over a year ago I was jumping around between Ruby, Java, Python, HTML,
CSS, JS, SQL, R never finished learning or using any of them until my wife
asked me to automate a manual process for her. I started out with solving her
problem and learning enough of the languages that will quickly solve the parts
of the problem.

In the end, I learnt enough of mySQL, PHP, and Bootstrap to deliver a complete
solution to her problem. There was enough fear of failure and being
embarrassed that I delivered a complete solution, however rough, to her. Since
then I have modified and extended the solution and now it is being used by
another 1,000 users, still it is an ugly piece of work. But I am much more
satisfied and encouraged to continue learning and improving.

------
alberich
I don't get it. What do people mean nowdays when they talk about being a
"coder"?

It seems everybody want's to build stuff before understanding the fundamentals
of computing. I don't see how jumping right away to trying to build stuff for
the web can make it easier for someone to learn to program. No talk about
algorithms, datastructures, and so on.

I'm not dimissing this approach, I just feel like it is not the most
productive in the long run. It may lead to the development of bad habits,
cargo cult, and stuff like that, derived from misunderstandings of how
computing works.

EDIT: as an example.. i had a friend that learned to program the way you
suggested, though he lacked knowledge of basic stuff like recursion, ordering
and search algorithms, and so on. He sure could get things done, but not
rarely the approach used had extremely bad performance or did things like
modifying data shared between threads in an unsafe maner.

~~~
fks
Totally agree with you that the skills learned from messing around won't turn
you into a fully skilled programmer. My argument is that if he'd learned
algoritms, recursion, data structures, etc. he probably would have hated and
dropped it, while instead he at least knows something, has the ability to
teach himself more, and hopefully has fond memories. It's much better to
foster a true interest in programming - even if they're not very good - if it
will then lead them to improve themselves and enjoy doing it.

~~~
rtfeldman
Yeah. And as a newbie, which sounds like the more plausible path to
successfully becoming a real programmer?

1\. Can't do anything -> Learn to build stuff -> Learn to write good code

2\. Can't do anything -> Learn to write good code -> Learn to build stuff

Plenty of folks need the motivation of seeing what cool stuff they can build
to make it through the dry parts.

~~~
IEatShortPeople
My (heavily biased) recommendation - start with c++ or some other annoying,
slow language. I know other people say learn python or ruby, but I think that
makes for sloppy programmers and bad habits.

First, read Introduction and Basics of C++ in the link below. Then make a text
based rpg with 1-2 rooms. I would have a character and two bosses each with
with power, toughness, and 1-2 attacks. Then read Compound Data Types and
Object Oriented Programming from the link below. Finally, revise the code of
the game to use objects (don't worry, that will make sense once you finish
reading). Also, to emphasize your bossness, say that are "refactoring" your
code.

As a gamer, I thought it was cool that I could make a simple game like this.
Maybe you won't. In which case, my suggestion probably is worthless. But, I
think that learning a more systems level language will force you to think more
about your code and make you write better code in the long run.

Links: tutorial - <http://www.cplusplus.com/doc/tutorial/> compiler -
[http://www.microsoft.com/visualstudio/eng/products/visual-
st...](http://www.microsoft.com/visualstudio/eng/products/visual-studio-
express-products) \- if you are on windows. If you're on linux, install g++
(sudo apt-get install g++ for ubuntu/debian and sudo yum install gcc-c++ for
Fedora). If you're on a mac, no idea, I don't use macs.

~~~
PavlovsCat
I actually agree with making game-y stuff just for fun, because it allows you
to think up and build rather intricate architectures real quick. It's hard to
make a game as a newbie and not have it turn into spaghetti as you keep making
it more complex, but it's also no biggie, and you get to learn how to
recognize those things, what to improve etc. Practice with games, when you
become more confident make applications; to me that makes sense? _Playing_
games may be a shallow pastime, but _making_ one can become more hardcore than
one imagined real quickly. Just about anything in programming you could
mention, certainly all the "pedestrian" things, could theoretically be put in
a game - but a game can also be just two rectangles and one circle, and in
that spectrum, and the absence of even the pretense of being useful, lies a
great opportunity for experimentation and learning.

Make a simple clone of a game or application or graphical effect you adore,
and go from there. There's still plenty of opportunity to suck the fun out of
it later :P

------
bobbyongce
Totally agree with your point. I tell almost everyone trying to learn
programming to start off with Udacity CS101 with Python. I myself started with
HTML/CSS a long time ago. It is not programming per say but the satisfaction
of having created a simple web page is satisfying. Learning Ruby on Rails from
the beginning will be too much to handle at one go without even knowing the
basics of HTML/CSS/JS and not even to mention the basics of database design.
It will take a long time, but it will be worth it as knowledge and experience
is accumulated. Start Small, Have Fun - good advice.

------
Tycho
Don't bite off more than you can chew. Goes for a lot of things. I used to
write lots of short stories, then I started working on a longer, novella
length piece. After ten chapters or so I got sick of it, but didn't want to
start anything else with that unfinished. Pretty much stopped writing after
that.

------
cgrusden
I like the comparison to sports. And, CSS/HTML and then Javascript etc,
learning the fundamentals of those - is what EVERY Developer should have (or
currently do). So, I'm with you on that one.

------
GreySyntax
Got to be the best way books can only teach you so much!

------
camus
dont learn how to code , but learn how to build stuffs. Coding is just a mean
to an end.You need to learn how to ship products ;)

~~~
fks
Ah man... this is such a better title. What was i thinking???

