
What I would do differently if I was learning to program again - stockkid
https://www.reddit.com/r/learnprogramming/comments/8wr9xv/what_i_would_do_differently_if_i_was_learning_to/
======
bungie4
I wouldn't. I'd learn a trade. Not to be facetious, I'm serious. I love
programming. I never played video games, I spent my free time learning basic
and then assembler in the late 80's. At the time, I was custom cabinet maker.
I eventually become allergic to the 'smell' in oak, causing health problems. I
had to give it up. I was busy 8 hours a day. I made decent money. Theirs a
certain satisfaction at the end of the day and being able to point at
something physical and say 'A good days work'. I began contract programming
and eventually into full time employment.

Flash forward about 30 years. I'm still writing code professionally. I rarely
write code for just enjoyment anymore. Those carpenters, cabinet makers,
plumbers, electricians.. .trades people, make the same or more than I do.
Their unionized. They can work practically anywhere and make the same amount
of money. Not just in major cities. It doesn't see many radical shifts in
technologies, unlike programming that is a life long learning because of
advancing tech. Its VERY likely you will find your skill set obsolete without
a real concerted effort of constantly upgrading. I wont even get into the
culture which IMO is fostered by those writing the cheques and even your
peers. Nor the moral issues that you will inevitably face - something few
programmers ever talk about. It's a real kick in the happiness meter when
something you write is designed solely to put many people out of work.

My opinion, my real opinion, is that if you find yourself writing code 'for
fun' even if you don't know what your doing, pursue it. If your only in it for
the career. Turn and run like hell. You'll be burnt out in 5 years and
starting over.

~~~
big_youth
The grass is always greener. I grew up in a working class neighborhood where
the majority of my friends parents and high school friends later became
involved in trades. My high school had a trades program for mechanics, HVAC,
electricians, plumbing, and a beauty school.

The vast majority are NOT making six figures. The work is hard, has long
hours, and is physically exhausting. My grandpa was a welder/machine shop
owner my uncle is a electrician. They would trade anything for a cushy desk
job with great pay, great benefits and easy workload. I've never worked past
4pm and have ample paid vacation time. They will never be able to say that.
Google says that here in Austin TX, the average master plumber makes $25 an
hr. HVAC is the highest at $44 an hour on average. And we are going through a
construction boom, also don't forget that you have to factor working in 100
degree heat and 50% humidity 5 months out of the year.

Sure you can start a business and eventually have 5 workers and 3 trucks like
my grandpa but then you become a entrepreneur and have to deal with the whole
billing, scheduling, selling, headaches of running a small business.

I find a lot of tech people idolize the blue collar fields. It's damn hard
work.

~~~
bungie4
Just for a point of reference, I've been a Cabinet Maker, Welder, Powder
Coater, Skid nailer, punch press operator and more. Believe me, I understand
blue collar. I was in my 30's before I worked professionally as a programmer.

I currently live in a town that is resource based, mining and forestry. The
epitome of blue-collar. Believe me, those guys make double what I do with
bonuses and benefits. Even without, they make significantly more than I do. It
isn't uncommon for a worker in this town to be able to retire by 45. They work
until they are offered early retirement, or, have their pensions bought out.
All this with very little education beyond 'common-core' in the mining sector.
Ya, they bust their asses. But they're paid for it. So, ya, you raise valid
points, but I'll stick with my first hand experience. Have you ever worked
blue-collar or just second had info as you present.

~~~
aplummer
> They can work practically anywhere and make the same amount of money

You are contradicting yourself by saying you’re in a boom town and also they
can move anywhere. (Can they move to Thailand? I can move to Thailand as a
programmer). In a mine in Australia you can make 6 figures standing at a gate
and letting trucks through, or higher to drive the truck, but it’s specific.

I think their mobility would definitely be worse that a programmers.

> I'll stick with my first hand experience. Have you ever worked blue-collar
> or just second had info as you present.

I don’t think anecdotes are a good example here. Something like
[https://data.gov.au/dataset/taxation-
statistics-2013-14/reso...](https://data.gov.au/dataset/taxation-
statistics-2013-14/resource/c506c052-be2f-4fba-8a65-90f9e60f7775) would be
better.

------
hguhghuff
I’d use an ide from day 1 instead of wasting time with vim.

I seriously dramatically slowed down my advancement as a programmer because I
didn’t use a full featured ide straight up.

Now I only use vi to edit files in /etc

~~~
omidmnzadeh
I'd use Vim from day 1, instead of wasting time with several IDEs.

~~~
hguhghuff
Why would anyone not want the power of an ide?

Is it a Unix tough guy thing where there’s nothing that a GUI app does that
you can’t do better in a terminal? Or is it that you’ve never really spent a
lot of time in a professional ide so when you argue against it, it’s cause you
don’t know?

~~~
falcolas
All my opinion, of course.

I learned Python much better because I did not use an IDE.

I've written Java and C# using IDEs. I barely remember anything about their
standard libraries. Python, in comparison, I know like the back of my hand.
Thanks to writing Python in vim, I had to reference the docs, and eventually
memorized them. Like vim itself, it made for a steeper learning curve, but the
productivity gains in the decade after have been well worth it. I've since
done the same thing with Go.

And that's not even mentioning that vim _is_ an IDE - it's an extensible C
IDE. Building with go-to-line errors? Yup. View definition? Yup. Syntax
highlighting? Yup. The only thing it's missing is having the debugger built
into it.

In the end, vim has the best features of an IDE without the bloat. It makes
you use your brain when writing new code while giving you the ability to
navigate your existing code with ease.

~~~
lghh
> I barely remember anything about their standard libraries.

If an IDE can abstract that memorization away from you, what's the problem?
The benefit I provide as a software developer is to solve business problems
and provide value to the people that use my product. Knowing the optional
third parameter to a string method I use once a month off the top of my head
really doesn't help me with that as long as looking it up isn't slowing me
down.

~~~
jrockway
I think the problem is always in the breadth of understanding. When you read
documentation you discover more than exactly what you're looking for. When you
tab complete something, it just tells you all the methods in the class that
start with the letters you typed.

------
sus_007
I'd just buy the book on the subject and leverage their respective web docs
instead of watching lengthy videos of people talking about the thing.

Looking back at it, I regret not investing in quality books rather than some
online subscription.

~~~
j45
I have generally always learned from books. Today's increased use of videos
helps with high level explanations, but video can't keep up with changes as
quickly as text can.

~~~
abledon
videos where I can watch the developer coding are the best for my style of
learning. really sticks seeing it executed rather than showing some powerpoint
slides of high level diagrams and code snippets.

~~~
j45
I prefer a combination of videos and books. It doesn't seem realistic with how
content is packaged and delivered that one or the other entirely can work on
their own.

I'm not sure where the idea of powerpoints came from. Well written books
generally read like videos. Books have the added benefit that it's easier to
jump around and drill down right to what you are looking for, something that's
generally harder to hop around on the timeline of a video.

Still, Videos are excellent to watch for many things.

Updating videos though is tough, and it can cause videos to not be as up to
date and indepth.

------
mxuribe
I don't code anymore (I'm more of a pointy-haired lower boss)...but what i
wish i could go back in time and change around this is to have focused - I
mean really, really focused - on 2 or 3 different programming languages only.
Instead, what I've done over the years - again, when I coded as a dayjob - was
to go shallow on far too many different languages (and ecosystems). I don't
think it was me just chasing the "new thing" for the popularity of it. I
genuinely was curious about, and wanted to learn "the new thing". The problem
- as is often the case with tech - is that there's just too many "new things"
coming out all the time...and one just can't keep up. So, sure, i feel like
somewhat a jack-of-all-trades (and all my employers have benefited from it),
but in more ways than i would like, i lack the depth - and possibly
enjoyment/fulfillment - of being really awesome at one or very few things.
That old adage about picking one (or a very, very few) thing(s) is no joke;
and i see its wisdom only now (after working for 22 years professionally). If
i could travel back in time (relative to programming), I'd tell my younger
self 3 things:

1) Focus on depth of a couple of things, and never mind breadth.

2) As soon as possible - either before graduating college, or right after,
etc. - work for yourself and not The Man. whether going into business as a
solopreneur, or partnering with a few people - doesn't matter. Mistakes will
be made, but you will feel more in control of any/all outcomes - good or bad.

3) Be generous for experiences, but be a cheap bastard when buying
actual/material "things". Save shit tons of money.

~~~
sus_007
> _...either before graduating college, or right after, etc. - work for
> yourself and not The Man..._

Why do you think that would an appropriate moment to do so ?

~~~
mxuribe
Because the early complacency of working for someone else doesn't get a chance
to set in. Also, because if things don't work out with some initiative, you
can bounce back from a setback much easier/quicker.

------
watwut
I dont really agree with do not go to bootcamp advice. I think that structured
supervised learning it can be very useful for those who are starting from very
little knowledge. Knowing what is worth cloning/learning and what exactly to
do with that clone or what exactly to learn is half the struggle for those who
dont know much but have aptitude. Moreover, deadlines add motivation and
prevent freeze from the thing not being perfect enough yet. Some bootcamps
seemed to really push people to learn maximum during short time, so if it is
not too expensive (money matters) then it might be really effective way to
start.

I was able to come up with realistic own projects only after learning in sort
of similar way - through structured organizations and from friends advice. Not
everyone has friend advice. And having actual task someone will check adds
motivation to finish it - finishing those own assigned projects that you are
pretty positive are no useful to anyone is demotivating.

------
noelwelsh
The number one thing I see in my students (I teach Scala, usually to already
experienced developers) is they don't actively engage with the material. Write
notes, or code up short examples, or draw pictures, or whatever works for you
to actively think about what is being taught. This corresponds to "Write down
what you learn" and "Build shitty stuff that works" in the linked article.

Bike shedding IDE or editors is a game everyone can play (use Spacemacs) but
as long as the tools don't get in the way it's not very important at the
start.

~~~
ci5er
> they don't actively engage with the material. Write notes, or code up short
> examples, or draw pictures,

Do you lecture? I'm an intense scribbler of notes during lectures, but I don't
(wouldn't) code up examples during a lecture, because it would get in the way
of my listening.

I guess I'm asking: what is your knowledge delivery system format? "Actively
engaged" will take different forms depending on the delivery system...

~~~
noelwelsh
It varies. Several years ago it was lectures interspersed with exercises. Now
we know a lot more about pedagogy we use many tricks: we live code, we get
students to vote on questions, we have them work in teams and teach each
other, etc. Live coding is a good time to code along.

I agree that what actively engaged means will differ depending on student and
context.

~~~
ci5er
Interesting.

If I had to work with a pair or a team, as an introvert, I would find myself
subtly withdrawing from active participation. I like live-coding, and I like
active-listening (the latter is absorbing, hoping to understand and the former
is testing/verifying/correcting/practicing your understanding, but I like
absorbing or total-immersion personal practice. Group exercises get in the way
of that (for me - again - I'm probably weird).

So, (and I'm thinking about this as I type), I think that I am active, but in
my own particular ways. Because I grew up in odd remote/rural circumstances,
maybe these habits were habituated because I did not get socialized with
normal folk well until my mid-to-late- teens. But, maybe it's genetic? I
notice one of my two sons has the same tendencies, and he's lived in an
urban/public environment his whole life.

What I'm pondering is (beyond the scope of your Scala classes), is whether
there are ways to actively engage multiple "types" of people? I'm not just
talking about what they call "visual learners" vs "audio learners" (which has
largely been debunked?), but ... IDK. I'm trying to assemble a platform for
programs that get people to/through their GED, as various states put work
requirements on government benefit recipients, and a major hiring block is
simply not having a high-school degree. I'd like to make everything as warm
and fuzzy and low-friction for everyone as I can - but I don't know how -
because (obviously) not everyone is me! :-)

~~~
noelwelsh
Yes, learning styles have been debunked.

The group work falls under the general rubric of "active learning". It's more
structured and shorter (20 mins maybe) than the kind of project I was exposed
to at school and University (which might have been 6 weeks long, for example.)

I can't comment on your particular situation, as I don't know enough context,
but in general there is an incredible amount of research on effective teaching
methods. I've only started to get into the field in the last few years and I'm
far from an expert. Nonetheless, some suggestions: there will be a lot of
topic specific research you should probably look at. In addition there is
general research on pedagogy. A good starting point is probably
[https://visible-learning.org/hattie-ranking-influences-
effec...](https://visible-learning.org/hattie-ranking-influences-effect-sizes-
learning-achievement/) This shows: different teaching techniques can have huge
effects on outcomes, and there are a lot of different effective techniques you
can incorporate. There is some nuance in the techniques so it's worth reading
deeper on particular topics (and reading the dissenting opinions!)

~~~
ci5er
Thanks!

------
falcolas
If I had to do it again? Avoid going down the operations path. Not because the
knowledge wasn't valuable, but I always enjoyed working on bigger programming
projects more than tinkering with other people's big programming projects
(Linux, Ansible, AWS, Cisco, etc). Having operations on my resume, however,
pigeon-holed me into a particular role professionally.

Of course, that's not of much use for anyone else. In fact, I'd recommend
getting operations experience to more programmers, if only because we always
need more people. But I also understand why more people don't aim to get
operations experience.

------
curlcntr
I learned to program on my own then studied EE and hard sciences in school.
Figured I already knew everything about programming. Hubris of my youth. I'd
have taken more CS courses in college.

------
snarfy
Don't be a language snob. I wish I would have learned more languages sooner.

