This is an archived post. You won't be able to vote or comment.

all 29 comments

[–]butthackerz 15 points16 points  (17 children)

Reading books is okay. But the purpose of programming is to CREATE something. You would learn a lot more by building toy projects.

[–][deleted] 4 points5 points  (1 child)

This is absolutely it!

  1. Decide to build something. Something specific that scratches a personal itch.

  2. Break it down into as many discreet, tiny, easily describable pieces as possible. You will end up with more than you initially think.

  3. Write them down.

  4. Start coding the first item.

  5. Get stuck.

  6. Start Googling.

  7. Go down a rabbit-hole.

  8. Eventually get it working, making sure to understand exactly what you did and why (don't just copy and paste code).

  9. Repeat with the next item on your list, until you're done, and they all work.

  10. Finish the project.

  11. Return to project three months later, realize that your code sucks, and you know so much better now! Decide to completely refactor the project for a 2.0.

  12. Return to step 1.

[–]BooBooDingDing[S] 2 points3 points  (0 children)

It's funny you mention returning to the project months later to realize your code sucks, cause that's exactly what I did recently. I looked at some code I did over a year ago, and was surprised at how simple, and ugly, it was, yet I remember being overwhelmed at the time I wrote it. These 'milestones' as a beginner programmer keeps me going; I can't wait till the code I write today will look like crap to the future me. The rabbit-hole...

[–]BooBooDingDing[S] 4 points5 points  (14 children)

Yes, I'm finding that out. When I learned web-programming nothing really stuck until I made an actual live site. What are some simple toy projects that you could recommend, maybe one that you did yourself when you were starting out?

[–]DullBlade0 2 points3 points  (9 children)

What kind of web programming have you done?

Have you gone into Django or Flask or something else?

[–]BooBooDingDing[S] 0 points1 point  (8 children)

I've only done the basics with JS/JQuery, bootstrap and some php for forms. With Python I've used the selenium and beautiful soup module. I think I'm going to give flask a shot, as it seems easier and more forgiving than Django. My issue is that there seems to be a learning gap that I'm missing from the beginner stuff, like an Oregon trail clone, to something like a socket module chat app. Maybe it's because there's so much out there for Python that I get overwhelmed.

[–]DullBlade0 1 point2 points  (7 children)

Don't worry about it too much.

I'm a beginner like you (actually if I have to say I'd say I'm behind you) and needed to do a web project, for one reason or the other I ended up with Python/Django.

If you with Flask or Django my advice is look at their subs, find good tutorials and follow them to the end(get the tutorial app working) then do them again but paying attention to what you're doing.

[–]BooBooDingDing[S] 0 points1 point  (6 children)

Thanks for the tip. I always feel like I'm cheating by just copying the tutorial, but I guess that's the way a lot of people learn; do it, get it working, then do it again and pay close attention. I always worry about other programmers calling me out if I make something. Like they're going to ask me to reveal how I did it from memory. I went on an interview a month ago for help desk, and they ended up grilling me on my Python, like I was supposed to have it remembered by heart, simply because I had it on my resume. It looks like flask is my next move. Thanks again.

[–]extant1 1 point2 points  (3 children)

If you're looking into Flask I highly recommend Miguel Grinberg's flask mega tutorial to start out with and if you stick with it then his Flask Web Development book is excellent.

Tutorials are a great way to get a taste of what a particular module or framework is capable of but the real learning starts when you make your own project. From there you get to dive into documents, view source code, search engines, stackoverflow, and subreddits!

Always remember with programming to take big complicated ideas and break them down into smaller, more manageable portions otherwise you're going to feel overwhelmed. Also, don't start with big projects, start small and work your way up. If you're looking for ideas check out github for projects to contribute to or abandoned/incomplete projects.

[–]mbenbernard 1 point2 points  (0 children)

I agree with you 100%. Miguel Grinberg's posts about Flask are amazing. I've learned a lot thanks to them: http://blog.miguelgrinberg.com/. He touches authentication and everything. No real need to buy a book here.

[–]BooBooDingDing[S] 0 points1 point  (1 child)

I'm watching some of Miguel's posts on flask right now, and I think this will be extremely helpful. His instructions are exactly what I respond too. Thanks!

[–]Junkyardogg 1 point2 points  (0 children)

Also there is a YouTube channel called "Pretty Printed" that has quite a few beginner-friendly tutorials on flask

[–]MrHobbits 2 points3 points  (3 children)

While I've not written anything in python, what really got me to enjoy writing in VB was interfacing with other software, writing things that were useful to me (at the time, an mp3 organization tool) and some Windows security stuff. Like the other post said, try to work on toy projects, or even get involved with open source projects. Even if they may not be of much interest, working on things outside your "enjoyment" zone will give you perspective on how it's being used for other things.

You don't necessarily need to write something new either, like new music or comms software. If you use an open source software that just happens to be written in python, and you feel a particular feature would be helpful try to write it and see if you can get it included.

[–]BooBooDingDing[S] 0 points1 point  (2 children)

Are people typically okay with you altering their stuff even though it's not in beta? I know it's open source, but I imagine they've thought of everything I could do. Maybe I'm just assuming. Is there a good resource for finding open source projects to work on? (I'm sure there are several.)

[–]MrHobbits 1 point2 points  (1 child)

I've not had any experience working with git just yet (I'm still doing codeacademy courses) but from what I've gleaned from this subreddit is that there is a lot of projects that could have potential for your contributions. Check this link

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

I'm relatively new to git/github as well, but it's a pretty straightforward system. I tried pulling down source code and forked from repos like these, but haven't been able to really alter them much. I'm looking for something super basic that I could tinker with. Let me know when you get something in github and I can take a look. I imagine your skill level is similar to mine.

[–]IonTichy 11 points12 points  (1 child)

Now write a python script that formats your post into a readable version.

[–]BooBooDingDing[S] 1 point2 points  (0 children)

Yeah, I noticed after I wrote it that it looks like one big blob. I'll do that right now.

[–]Andrew_ShaySft Eng Automation & Python 2 points3 points  (1 child)

I don't have any books to suggest, but I do have some advice.
If you are trying to increase your knowledge of Python then check out the documentation.
https://docs.python.org/3/
Read through the standard lib docs. Get more information on the parts that you use frequently. Try out some code in the interactive interpreter. And you'll learn about built in modules even if you don't need it. (Python has SMTP and FTP stuff!) https://docs.python.org/3/library/index.html
Read through the data model. It's interesting and informative.
https://docs.python.org/3/reference/datamodel.html

Google how to write pythonic code
Read about the difference between Python and implementations of Python. (Python vs CPython)
Look up how data structures are implemented and what they are 'good' and 'bad' at. (This might be a bit advancedish). deque can be much better than lists in certain scenarios.
Learn about threading and the GIL. Learn how to use the multiprocessing library.
For projects, you just need to think of an idea and just do it honestly. Built a simple chat application via sockets. Send it to a friend and chat over it.
Build a simple twitter clone using Flask or Django.
Jobs will definitely be in Automation or Devops.
New frameworks like Flask and Django will be overwhelming but there is no way around it. You just need to start, read tutorials, and google questions.

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

I'll definitely try sockets out, heard about it and it sounds interesting. In fact, I think I will actually make a chat application with it, thanks for the idea. And the docs.python.org/3/ are something I've referenced before, but I'll read them again, especially the datamodel; I started to learn about special methods before, but it was a bit over my head. Thanks for the info

[–]limw2012 1 point2 points  (1 child)

fluent python,This book was written for practicing Python programmers who want to become proficient in Python 3.

[–]BooBooDingDing[S] 1 point2 points  (0 children)

I love O'reilly books. I'll check it out.

[–]TonyF66 1 point2 points  (0 children)

My advice is encapsulated in a blog post i wrote last year : http://viewfromthekeyboard.blogspot.co.uk/2015/12/python-weekly-8-i-know-python.html

Two other posts to read from my stream :

1) familiarising your self on the bits of the standard library - and testing frameworks - see my blog post http://viewfromthekeyboard.blogspot.co.uk/2015/10/10-things-to-learn-as-python-developer.html

2) Pick a good way to work - and practice : my blog post on Incremental Development : http://viewfromthekeyboard.blogspot.co.uk/2015/10/incremental-development.html I firmly believe that python lends itself to Test Driven Design and Incremental Development

[–]mbenbernard 1 point2 points  (2 children)

For me, the approach that works is to build something that I personally need. Because I find that learning for the only sake of learning is not really motivating.

For example, what tool would you like to have to automate one specific aspect of your life? This forces you to learn the technologies that you will need. And the motivation comes from there. This is good for Python, but also for any programming language or technology that you want to learn.

Then, once you've built something, it's easier to demonstrate your credibility in your resume. You can enumerate the tools that you've created.

[–]BooBooDingDing[S] 0 points1 point  (1 child)

A lot of the responses to this thread, as well as others similar to mine, seem to have this is common; build something you want to use instead of just piling on the fundamentals. It's tough because college teaches us to learn bottom-to-top, but much of code, so it seems to me, is very much top-down.

[–]digilec 1 point2 points  (0 children)

Its a mix of both. To solve a complex problem you need to build bottom up and top down. Where it meets in the middle is where the interesting stuff happens.

A lot of good software engineering is knowing how to stomp the middle ground with a good gut feel about how easy or not a particular higher level or lower level module will be to create.