

Ask HN: I'm a solo junior dev, what should i focus on? - basdevries

I&#x27;m a junior dev working for freelance clients and working on my own projects. I&#x27;ve noticed that in the recent couple of months, I&#x27;ve not progressed as well as I hoped I would.<p>Yes, I gained experience and whenever I&#x27;m going to work with framework x again, I&#x27;ll be a lot quicker. However, I don&#x27;t have full insight in the tradeoffs that I&#x27;m making when chosing a certain architecture for example. I&#x27;ll just code what seems logical in my head, and build further upon that.<p>I&#x27;m mostly coding in OO languages. Should I focus on programming concepts? Should I dive deeper into API methods?<p>Also, Since I&#x27;m able to &#x27;build&#x27;, there&#x27;s the fact that spending more time on figuring out what approach is best, I&#x27;m developing on a lower pace.
======
valarauca1
If you want to grow as a developer the best thing to learn is normally always
the same.

Data Structures.

Nothing will help you more in interviews, day-to-day dev work, general problem
solving, and even application planning. The goal is eventually to transition
your mindset into thinking about structures holding your data, and how they
act, and interact. Once you do this the optimal architecture, and what you
need to write as code becomes clear as day (really regardless of the
language).

~~~
basdevries
How should one go about 'training' that? Is it experience, or are there books
etc? I'd love to dive into that.

~~~
valarauca1
Tons of online resources. Books are all a bit dense. The ones I'll suggest are
bit _hard_ to get into, I'm a huge fan of _The Art of Computer Programming_
Vol 1-3 all a master piece, but very very dense, very very mathy and
challenging even if you've taken college level discrete mathematics courses.
But a HUGE amount of the field is contained within them, and the information
density is staggering. Donald Knuth's writing is just absolutely brilliant and
pointed in places.

Simply searching on Amazon, "Your language of choice" \+ Algorithms/Data
Structures I.E.: "Javascript Algorithsm", "Ruby Data Structures", "Java
Algorithms", etc.. Will likely pull up a few options, check reviews, find
something in your price range and read it.

A lot of it is self study. Just be willing to explore docs, watch videos, a
lot of reading, try things out on your own.

~~~
brudgers
If I were to recommend three of the four volumes of _TAoCP_ , I would drop
_Volume 2: Semi-Numerical Algorithms_ in favor of _Volume 4a: Combinatorial
Algorithms, Part 1_. Developers, junior or otherwise are simply less likely to
find themselves in situations where there is a good reason to implement a
psuedo-random number generator or a complete numeric system than to wind up
dealing with problems of non-polynomial order or boolean functions.

Of course, I don't know why anyone would recommend three but not all four if
that were an option, so I guess I really could just say, there's no reason not
to get volume 4a too, for a person heading down that road.

------
phantom_oracle
Just to counter everyone who says "learn another language like Haskell", I
completely disagree.

You're at the point where you know some language and OOP at a decent level.
You now need to invest time learning things like data structures and
algorithms that are APPLICABLE to your work.

Keep adding incremental knowledge, but make sure it is having a direct benefit
to your work at all times.

The "learning paradox" of having to master languages repeatedly is a waste of
time at a junior level. You'll continuously invest in a new language without
ever finding it applicable (eg. "learn java, learn JS, learn CSS/HTML, learn
python, learn ruby, learn haskell, learn rust, then learn x-framework for each
language, learn y-framework cause someone on the internet said x-framework is
too bloated, learn this, learn that ...").

As your questions on line 3 asks, I say invest in the higher-level concepts
that work across languages. Focus on a domain (some language, 1 or 2
frameworks, a DB) and stick with it.

And, as others have said, find a mentor. If you want to keep freelancing,
you'll find a mentor at a meetup. You will definitely gain a lot from
experience over a book/tutorial in certain situations.

------
JSeymourATL
> I'm a solo junior dev, what should i focus on?

Beyond technologies-- Focus on building a solid consulting practice, client
management, how to prospect & pitch new business. Recommend reading Alan
Weiss,
[http://www.goodreads.com/book/show/260218.Million_Dollar_Con...](http://www.goodreads.com/book/show/260218.Million_Dollar_Consulting)

------
pil4rin
Depends on your planned career path- do you want to run a business, or be a
developing badass? Few can do both extremely well- If its development, move
towards learning more about Software architecture, including SOLID principles,
Patterns, best practices(as it pertains to Computer Science as a whole, not a
particular technology or framework). While doing this, blog about it so your
current and future clients can see your humble nature (rare for up-and-coming-
to experienced developers) and progress. More importantly, if you think about
doing a personal project or have an idea for an app- don't focus on making
money, focus on the knowledge and experience gained through the work itself.

~~~
victorhn
how do you learn how to make software architecture decisions and learn solid
principles? I am struggling with this myself, my current position is about
solving bugs and maintenance, and while this may be a godd position to learn
how more seniors implement certain features i often feel that i am not
learning how the decisions about the architecture, and due to the senior
members working remotely it's difficult to ask them about it.

------
lukaslalinsky
I think the best way to learn to be a better programmer in your position is to
find a more stable job with a good team of people. Learn from other people's
experiences and mistakes. Working as a freelancer early doesn't have many
advantages if you want to build a career, in my opinion.

Other than that - Keep trying different things. Go deeper with the frameworks
and libraries you use to understand why do they work the way they do. Read
about things that are interesting to you and you have some use for. When you
have a problem, don't just "fix" it, understand exactly where, why and when
it's happening.

~~~
Bahamut
Agree 100% - I only am now starting to approach freelancing seriously after 2
years of development at several companies, and I found I have learned a lot
from working with other people. Working with other people means you can bounce
a lot of ideas between each other and you can see how others code in code
reviews or just browsing their code.

You will never get as strong feedback being a solo programmer - in fact, the
feedback will likely be minimal.

~~~
lukaslalinsky
There is also one other disadvantage of being a solo junior dev - you will
often work on very simple things. Complex systems usually require more than
one person, and even if you are working as a junior dev who is just assigned
tasks, you get to see how larger applications are built and gradually get into
the design process. This is not something you get when building simple web
apps as a freelancer.

------
hackerboos
You need a mentor.

Freelancing as a junior dev is not a good move. Find a full time position
somewhere that will train you and give you access to more experienced
developers.

~~~
codygman
As a counterpoint anecdote, I did freelancing as a junior dev and believe I've
turned out alright ;)

~~~
basdevries
Interesting, how did you turn out? And how did you turn out different from
other people (with a mentor)?

~~~
codygman
I'm not sure to be honest. I know about 15-20 languages and have written at
least a 500-1000 lines in each of them (most more), specialize in Python,
trying to specialize in Haskell.

Did Django web development for quite a while. Now I'm working for a large
company using Coldfusion (bleh), PHP, and some Python.

I frequently feel that I'm not good enough and that my knowledge is in the
wrong areas though. I've learned a lot about accumulating domain knowledge and
working with legacy codebases lately.

A huge blind spot I had was only passing familiarity with mysql, being used to
only using ORM's. I've mostly remedied that however and it's something I feel
most webdevs should know more about.

So... I can't really answer either of your questions and I'm not sure it would
be economical for either of us to try and test it. However I'm open to ideas!

------
Warewolf-ESB
Get involved in the open source community. You will be able to see how bigger
systems are built. Right now you know what you know and you know what you
don't know. But the gaping hole is that you don't know what you don't know!
Unfortunately working solo can be a bit of a trap in that regard.

------
niche
Keep reading Hacker News, cross your fingers and learn Haskell

~~~
valarauca1
I really do support your last statement (even if you made it as a joke).

OP stated s/he comes from an OOP background, and expanding into FP is a big
step into expanding the ways you think about programming, and gives you new
tools to solve problems with.

My job is still OOP, but the experience I've gained learning FP has helped me
a lot to come up with different solutions I may have never thought up before.

~~~
basdevries
I am excited to dive into FP, however, there doesn't seem to be a 'good'
language yet. I noticed that oCaml is running up but that's still a bit too
much 'scientific' as you might say. eg it doesn't really come close to
anything web/app related. If I'm wrong, please tell me! I'd love to do FP.

~~~
valarauca1
Common LISP is a great language, but it spoils you since it has so few
restrictions, its kinda in a class of its own because its just so
unrestricted.

Scala is a fine language, but limited, largely serves as gate way drug to
other FP languages. Its a very good starting point.

Haskell is odd and the type system is I feel restrictive. Also the community
is really addicted to big mathy words. I do love its notation at the same time
:\

F# is pretty much universally loved (from what I gather, I haven't used it
myself), and now that the .NET run time is unbolted from windows it might
start gaining traction.

oCaml I haven't used so I can't comment.

Erlang is VERY popular, especially with the backend FP crowd since it does
concurrency very simply. I haven't used it.

~~~
codygman
> Haskell is odd and the type system is I feel restrictive.

Can you elaborate on this? After using Haskell for some time now I can't seem
to come up with use cases where the type system is/would be restrictive.

