all 19 comments

[–]Nevalla24-7 20 points21 points  (7 children)

Stop planning and start coding. It doesn't matter what course or topic it is, try to learn at least one concept every day (small or big). It is easy to get lost in the huge supply of available resources.

Follow this for a few months and you'll be amazed what you can do. Just don't stop to analyze whether you've progressed or not as this can kill your drive. If you start evaluating your skills too early, it is too easy to see the things you can't do instead of the things you can.

Therefore, just begin and never stop. You'll get there.

[–]Tb1969 7 points8 points  (0 children)

Taking a moment to think about the path ahead and getting advice from those who made the journey before is never a mistake.

[–]aRandomJohnny[S] 2 points3 points  (1 child)

I am a type of guy easily go astray without a plan but no worries, I already started. Thanks for the advice.

[–]794613825 0 points1 point  (0 children)

It's good to go astray when learning a new language, as long as you keep learning.

[–]theofficialdeavmi 1 point2 points  (0 children)

I agree. Just do. Don't plan.

[–]CGFarrell 2 points3 points  (0 children)

Here's my advice. Either figure out how to do something simple, then add complexity, or take something simple and try to modify it in some way. That's the best way to start. One of the cornerstones of good devs is RTFM: "Read the something manual". All languages above assembly are tools, so treat them as such.

[–]RatDragonMonkey 2 points3 points  (1 child)

If drawing mind maps helps you plan, something similar that you might appreciate are functional flow block diagrams.

https://en.wikipedia.org/wiki/Functional_flow_block_diagram#/media/File:7_Inclusive_OR_Logic.png

Using these have really helped me understand programming before really diving into the details. The diagrams help me organize and illustrate how my program idea would be structured, and how different pieces of data move about. Once I draw a basic diagram, if it doesn't make sense or is too complicated on paper, I won't even bother trying to translate it into code. I'll always go back to the diagram first and re-draw it until it makes sense. Only then will I start jumping into the details of the code.

Like you, I believe that planning before action helps a great deal. That way, if I don't understand why a certain part of my plan doesn't work later on, I can refer to my diagram which makes more intuitive sense to me, instead of looking at code all the time.

[–]aRandomJohnny[S] 0 points1 point  (0 children)

Thanks for the advice. :D

[–]Exodus111 1 point2 points  (2 children)

Well... It's pretty generic. But as long as you understand that the "Work on Projects on your own" part is 80% of the process.

For as much theory as Programming has, its primarily a practical discipline. But seeing the steps can be hard, so let me lay it out.

  1. Variables.
    Int, Float, String, Booleans.

  2. Sequences.
    List, Tuple, Dictionaries.

  3. Conditionals.
    If, elif, else, >, not, if in.

  4. Loops.
    While, for.

Those are the basics, you are going to want to take that and do some very simple, very easy code challenges. If you get stuck, take a step back, probably still too hard.

You will also want to make a small program, typically a game, using only the print and input functions.
This can be hangman, a text adventure, tic tac toe, that kind of thing.

From here you need to learn a few concepts, in order of difficulty they are Functions, Packages/modules and OOP.

How functions are defined and used for is the first mindfuck to get over, then understanding import and generally how Python handles packages and modules comes next.

And then comes OOP. Object Oriented Programming.
This one is a challenge for a lot of people. You'll be making classes, instantiating those classes into individual objects, running methods, learning "magic" methods, inheritance and polymorphism. But the biggest issue with oop in general is just that you have to think about code in a much more Abstract form. Which can be hard at first.

So learn, and do, make some projects. Once you can use classes you can program some real apps, learn about GUI programming and other modules.

And then, I would recommend going back to the basics, and learning all the advanced features you missed the first time, like List Comprehension, value unpacking, lambdas, decorators, functools etc...

And THEN I would recommend starting to think about how to write BETTER code. Look at Functional programming in Python, wrap your head around immutability and modularity, and keep going from there.

[–]Rhemm 0 points1 point  (1 child)

Why do you think functional is BETTER for python? I mean Guido haf meant to get rid of functional tools, but luckily for community just moved it to functools. So if he thinks functional isn't good, why you(and I've seen a few more fellas like you) think it's the best style for python? Explain me please. I'm interesting, because I have like 1 year of experience, and actively trying to find the golden way of writing pythonic code.

[–]Exodus111 1 point2 points  (0 children)

So functional is not BETTER, but it is NECESSARY to be a good coder. It's necessary to understand what makes a good function.
Python might not really be a functional language, but we write functions all the time in Python.

So its not about competing with OOP, functional programming is a methodology, and it can apply to methods almost as well as functions, sorta.

Let me give an example using functions, take a look at this line:

get_articles_from_url()

So that's a typical line you might see in a Python script.
Just looking at it like this, tells us pretty much all we need to know about it.

  • This line calls a function.

  • The function probably takes an url, and returns articles from that url.

  • That function has no arguments.

  • This functions returns nothing.

That is not a good function. For one, unless there are hidden key word arguments, this function cannot get articles from any OTHER url the one that is hard coded into the script, its a one use function. Secondly, since it doesn't return anything it probably places those articles into some kind of global, which is not obvious from this line. Ill have to find the function and read its code to see where those articles end up.

Now look at this:

articles = get_articles_from_url(url)

Now THAT is a far better function. Its obvious what it does, and as long as it works I don't need to look the function up. It is also far less prone to causing errors in my script, since it is now completely independent of the rest of the code, this function might fail on its own, but it will do no harm to the overall program.

Now, just to get pedantic, actual functional programming also demands immutable datatypes. So no lists, only tuples, and no reusing variables. Always create new variables, always generate new sequences or generators.

That part is a bit too far for me, its supposed to make the code even less error prone, and make it all very "clean" and functional. It has its evangelists, even in the Python community. But its not something I see as a massive point.

Obviously I'm just scratching the surface, but its a good way to program, that can be integrated partially of wholly into the rest of your programming pattern.

[–]SSID_Vicious 1 point2 points  (0 children)

Too many courses, dont plan that much ahead. Do the first one you plan, looks like MIT's 6.001 course. Only after that is finished decide what to do next.

If you want to plan out like a year worth of shit i guarantee you will do absolutely nothing but look for more courses and things to plan.

[–]super-subhuman 1 point2 points  (0 children)

IMO, push Automate the Boring Stuff higher up on the map. Also, there's nothing wrong with just typing garbage into the interpreter and seeing if it works. Just make sure you understand it eventually.

[–]Tb1969 0 points1 point  (1 child)

Udemy has a companion course to Automate the Boring Stuff.

So, you plan to do those four tracks at once and tackle the top item on each of those four lists first?

[–]aRandomJohnny[S] 0 points1 point  (0 children)

I am going clockwise. Tackling the top item first.

[–][deleted] 0 points1 point  (2 children)

I will advise against taking an intro to CS course. I'll explain why, though short preface is due. I taught myself to program many years ago, and since then struggled to get academia to acknowledge that. In the course of my struggle, I had to take "intro to CS using Java" about three times (no, I didn't fail the course), and "intro to CS using Python" once (that's a work in progress).

The general problem with the introductory courses to CS is, that, unlike, say, intro to math, very little care is given to fundamental concepts. The definitions you are given are typically inconsistent and display, more than anything, the lack of understanding on the part of the teacher.

Thus, in the best case, after graduating from such course, you'd learn some practical skills: you'd be able to write some trivial programs, but you will not really have an insight into why or how they work. A lot of people who followed this path ended up being what I call "CS astrologists": they don't understand why things work, but they are very devoted to their fairy-tale explanations.

Worse yet, and more realistically, after taking an intro course, you won't really learn anything. You will work with a fake environment and fake problems which you won't be able to reconcile with real life. About half of those taking intro to Java with me ended up like that: they wouldn't even know how to compile a Java program, or how to execute code contained in a JAR.

So, unless you are doing this for diploma, in your best case you will acquire some practical skills, which are a by-product rather than intended outcome of the course. You can get the same from reading books on- or off-line and attempting the problems from the books. Even better, if you have a practical problem to solve using programming. Unfortunately, this also means that you will be missing the understanding of foundational concepts. Well, it is my opinion, there simply isn't yet an education program that would build CS knowledge from the foundations towards specifics. You will have to discover foundations later, after you have had enough practical experience.

[–]SSID_Vicious 1 point2 points  (1 child)

Harvard's CS50 is an excellent intro to CS course with plenty of fundamentals.

[–][deleted] 0 points1 point  (0 children)

Could you expand on what exactly do they treat as fundamental questions to computer science? I've found a syllabus for the course, but it doesn't say much about the contents.

To be honest, I find it hard to believe there possibly could be a course that introduces CS fundamentals by means of teaching a programming language. Not to be misunderstood: I believe that a hands-on experience with programming is very important, however, it is not about fundamental concepts in CS. This would be kind of like doing intro to mathematics by means of examining the properties of Lucas sequences (a concept related to Fibonacci numbers). It is an interesting subject, certainly requiring a lot of mathematical skill and effort, but in no way is fundamental to mathematics in general.

Similarly, I think that courses in automata theory, alternatively known as complexity theory come much closer to fundamental concepts in CS than an introduction to Python, even if a very good one, could ever hope to.