
Ask HN: How to fill holes in my knowledge - LostProgrammer
Hi everyone,<p>I finished CS Uni, after that I worked at a startup as a generalist, and after that I worked as a freelancer on a couple Android projects (and now I am in between projects).<p>I feel like a really bad programmer (28yo atm), and no I don&#x27;t think this is impostor syndrome. I never had official Android dev education, but I have had learned JAVA at Uni. On Android projects I worked I always worked alone and never have I had an opportunity to work with someone more experienced.<p>I think I am missing some parts of knowledge. It is like I have holes, so I am missing some basic stuff, but I know a bit of advanced, but holes are there also, I hope you understand. On projects I worked on I just googled away and created applications that worked BUT behind the scene is a Frankenstein monster code of bad programming practices (or at least I feel so even thou I don&#x27;t know what a good programming practice is for android).<p>Is it possible to acquire a good Android dev knowledge without working in a team and&#x2F;or company? 
I could probably find some &#x27;entry level&#x27; job at a company, but I don&#x27;t think I could join as a freelancer on some team because of lack of skill.<p>I am trying with some tutorials, and books, but not sure how successful I am being.
======
eswat
> I am trying with some tutorials, and books, but not sure how successful I am
> being.

What tutorials and books? First off I totally get you. For several years after
graduating I felt a hole in the pyramid of knowledge I felt university should
have provided me. Our program leaned heavily on how to use Java and Microsoft
technologies to fix problems big companies had. There was little room to
stretch our foundation and dive deeper into algorithms or understanding
programming without a language or framework attached to the material.

I’ve been fixing this by reading books and doing simple projects to fill in
that base layer of knowledge in that pyramid. These don’t really dive into
frameworks or even languages, but the basic building blocks of what we do.

Being effective with languages like Java or frameworks like the Android SDK is
nice. But I know for myself and many people that feel a tinge of imposter
syndrome that it’s due to lacking foundational knowledge. We either rushed
through this period or skipped it entirely. But it’s this through this period
where we develop on confidence with our craft.

There’s plenty of Ask HN threads on what to read to develop a good baseline of
programming knowledge (SICP, Code Complete 2 and Pragmatic Programmer will be
mentioned a lot). What I think is important is also to have a clear goal or
reason for wanting to read a tutorial or book and only follow through on
material that actually helps you accomplish your goals. Assume most tutorials
and books are fluff that will not actually move the needle for you.

------
gt565k
If you're trying to fill holes in your android development skills, you should
consider doing the android nanodegree on udacity.

It was developed by Google, so you know it'll cover almost everything and give
you best practices approach to developing android apps. It's also well
structured and can be done in your free time.

[https://www.udacity.com/course/android-developer-
nanodegree-...](https://www.udacity.com/course/android-developer-nanodegree-
by-google--nd801?v=ad2)

If you don't want to pay for the nanodegree, you can also take the courses
individually for free (without getting credit).

~~~
LostProgrammer
I already started this a week ago. But thank you for confirming the validity
of this course.

------
jason_slack
Well, perhaps you can find a mentor to help you understand your holes and how
to fill them.

Do it slow and methodically. Don't try to cram to fill all the holes at once.
Go slow. Identify one hold and learn how it is filled. Do examples, write a
small program to get practice. Ask someone to review your code.

Programming now-a-days is a marathon, not a sprint. Programmers need a pretty
deep understanding of their language of choice along with how to use it
correctly. I think the last piece lacks in a uni education alone.

Practice, practice, practice. I don't know java or I would offer to help. If
you get around to C or C++, email is in my profile.

~~~
LostProgrammer
Thank you, will definitely try something along that path.

------
eecks
You could run your code through a code analysis tool and then fix and
understand the mistakes. It should point out bad programming practices.

The best thing you can do is keep programming and aim for best practises. Ask
questions on stackoverflow, programmers stackexchange and
codereview.stackexchange.com

~~~
LostProgrammer
I never used tools like this, but honestly I am not sure if a code analysis
tool can show bad practices. Maybe it can show badly implemented algorithms or
something like that. Anyway I will look into in, thanx.

------
joeclef
I currently work as a Junior Developer--straight out of uni-- and I find it
really helpful to have someone more experienced review my code and give me
feedback. So in your case I would say try to work on open-source projects or
just join a team environment.

~~~
LostProgrammer
Yeah, I think that would be the best approach. The only problem being that I
live in a country where difference in pay when you work in a local company and
if you work freelance is 7-8 folds. Literary. If it were like 2-3 folds I
might think about sacrificing that for knowledge but this is just crazy.

------
horacio_colbert
I haven't finished uni yet, but I feel just the same. I've come to the
conclusion (at least in CS) that uni isn't enough to become a programmer.
Experience in a job and coding together with more skilled programmers are more
important than passing exams. Uni gives us a general understanding on the
subject, while specific skills we need to develop by ourselves. This is just
my point of view, sorry if it doesn't help much.

------
samblr
Open source projects seems to help if you know what to look for (like search
for top 10 android project/plugins/whatever) - breakdown each part you would
like to learn
(architecture/codeStyle/asyncTasks/compatibility/images/UI/tests/perf).
Concentrate one at a time.

~~~
LostProgrammer
Thank you, I think this approach will be useful as well.

------
_RPM
Practice Hacker Rank challenges until you can't anymore.

~~~
LostProgrammer
Hacker Rank can teach you algorithms, a bit of programming way of thinking,
and how to solve problems. But not how to actually organize code and have best
practices implemented.

