How do I become a better programmer?

Hey guys,

How do I get better at programming, I know the basic syntax to Java, C++ and visual basic. I haven't really done anything with them. How do I get practice outside of school. Do I just make up random projects for myself, is there away I can be useful as a new programmer. My goal is to do something with software development after college.

I have been in college two years and feel like I know nothing compared to other people. In no way am I good at any language where should I start. I feel like college is moving to slow for me and I need to move forward on my own I have finished the classes for the languages I will learn at my 2 year the rest of my classes are general edu classes.

My plan as of now is to learn python using Pluralsight and using there classes to get really good a python and transition that knowledge into other languages. I would do Java, but after knowing the basic it is painful to get though the first few videos.

I would like to do be able to work cross platform between Windows and Linux since I use both a lot.

Thanks for any help or suggestions.

reinventing the wheel can be a useful tool
for example i wrote a library to implement division in software (divide without using an actual divide instruction), it was pretty much entirely sparked by learning the fact that a lot of arm processors (even ones in smartphones) don't have dedicated silicon to do division, it is implemented in software by the compiler.

its ugly, not a fancy algorithm or anything, its basically long division implemented in software.
link

1 Like

I agree with @d0rk. The best way to learn how to program is to solve a problem you have. Or maybe create some software that you want or a friend needs (they have to use it and give feedback make it useful to you).

1 Like

Alright will look into that, I have a few ideas, just not sure if i am capable of creating it.

I agree with the whole "solve a problem" strategy.

To dive a bit deeper, I would look at some different linux operating systems and look at the various desktop environments. If you can learn enough code to tweak a desktop environment to do what you want, then most other languages will come easier to you.

I would not bother learning python. I really like python, but it is almost too easy. I would look at javascript. Its widely used for creating front ends for various applications and even websites.

If at all possible, I would actually suggest that you learn how to build websites. Its one of those swiss army skills that you can always fall back on in case you run into hard times. It will teach you to have good code organization and get you to be a better quality programmer. You can also contract yourself out over the summer break for some extra cash.

And always always always remember. Its not about how much you know, its about how well you know it. Focus on mastering a few core languages and put yourself in a really good position to get a job doing what you want to do.

I was thinking about this, I use i3-gaps and haven't found a status bar I really like was thinking about making my own, hence the learning of python, most of the status bars are made in python though i would just continue the trend.

I am working on this now, I am building a website and trying to learn the basics of javascript, I am doing it as a school project I have till end of July to finish it. The idea is that it is a web portfolio. I was thinking about learning LESS or SASS, but not sure how much it would help the site. I feel like my HTML is clean(i mean hard to mess up), but my CSS is a bit lacking. and I only know the basic of reactive design.

This is something I need to get in the mindset of. With everything not just programming, I can half ass do a lot of things, but i am not good at anything really.

I think that solving easy problems is good for start but you have to move forward so you will need some more complex ones. I recommend following sites where you can find many problems sorted by difficulty. You can send your code and it will be checked online. You will learn basics and algorithms which are necessary to solve some these problems "fast enough". You can also see how good is your solution compared to others in rankings.
Check out these sites:


https://www.codechef.com/
http://codeforces.com/

You can also find many others...
You can also check your skills in some online competitions.

Actually language is not so important but it is good to know basics of the most popular ones and master a couple of them. Focus on algorithms, object oriented mechanisms and design patterns. It is pretty easy to switch between languages if necessary.

You can also learn how to work in team and face some real world problems in various open source projects. Depending on what you are interested in.

1 Like

I will look into all of those. And I am starting to see the whole master the principles not the languages as a trend. Should I just work on "mastering" lets say C++ and get really good understand the fundamentals and how it works then transition the skills there into other languages. Master then syntax, then focus on improving problem solving using that lauguage as a tool to learn object oriented programmer and algorithms and just as a bonus be good at what ever language I pick.

I feel like I have a pretty good understanding of syntax, but have no idea on how to use it to solve problems.

I am really interested in helping with open source projects. Right now I feel like I am not very useful.

It depends on what you want to master. I mean for ex. if you want to be a web-developer you should focus on PHP/Python/JavaScript, (+ HTML, CSS, SQL). If you want to be an Android "mobile-developer" you should focus on Java. For OS development C & C++ etc... but it is good to know the basics of others. I'm good with C, C++, Java, C#, Python, JavaScript (HTML, CSS, SQL), but I also know the basics of Ruby, Bash, Pearl, Erlang, Lua, PHP and Scala so if I need to use one of them I can for ex. easy write some tests in Erlang or scripts in Bash with some help from internet (not learning from scratch). The more you know them the easier it is for you to learn new ones. Ex: when you know C++ learning Java and C# should be much easier. Let's say you solved a problem on Spoj in Python, you can think how to do it in C++ or Java or even submit your solution again (once you get the trick 'translation' to other language will be very easy).

You cant learn solving problems from books or tutorials the only way to be good at it is practice.

When you will be confident enough to start, find something interesting and try to join. It is really worth it, you can meet a lot of helpful very experienced programmers who will be happy to help you and share their experience. Solving exercises can help you to learn basics and algorithmic thinking, but working on the huge project with many layers of abstraction and many people involved is quite different. You need many new skills and tools to solve problems which you will never face working on your own little projects/exercises.

No idea right now, I am very undecided with what type of software I want to develop.

Yeah, right now I am going to work on JavaScript work the website I am working on in school. Right now i am tring to make a photo galley.

I really want to. I feel like working with other will have push me forward learning from others.

Project Euler has a lot of mathematical problems to solve (all kinds of difficulty). It's a good way to pratice.

https://projecteuler.net/about

Not a suggestion on getting better at coding but something to try out if you get stuck debugging a problem.

Talk to something about the problem. The countless times I've gone to a colleague and started explaining what I want my code to do and then finding the solution because I've spoken it out loud.

I now have a pet rock on my desk now and then we'll have talks.

Just start. I spent way too much time on thinking about what I could program instead of actually writing code. You learn the most, when you just start implementing something you find interesting. Really, anything goes!

But one important note: Don't hesitate to program ahead, but also don't hesitate to throw away code. With something like Git you can always go back, but often you'll be better off starting a project again from scratch. Starting from scratch is an important and good way to learn a lot about programming, so don't get attached to your code too much - if you're learning fast, you'll think your old code is crap in a matter of months or even weeks.

Do as many mistakes as possible as soon as possible. Learn what kind of mistakes you make and how to correct each type of mistake. This is one of the few areas in life where undo and rewind exists, so make sure to exploit it. Just knock yourself out. Feel no shame whatsoever, everyone's been through it.

Just start making a program to solve a problem. Roll out your own, reinvent the wheel. Take it as far as you can. Then ask yourself what made you stop/frustrated? What could you have done better and how? How will you avoid what made you stop in the future? Then do it again. Should you happen to lose interest, apply the same questions. Find your pleasures and frustrations, and work within them to get to know yourself as a craftsman. Learn to compensate, and learn new techniques down the road. Asking yourself the above questions, you will learn what you need to function within the craft.

Make sure you grow at least one program to become longer than 10000 lines of code, and then make sure you grow at least one program to become longer than 100000 lines of code. Try altering that code to do something else, or different. Try reusing it in another program. Asking yourself the above questions, you will at this point gain first-hand experience in software architectural challenges.

Further down the road, talk to other people about your challenges. Ask them both what they think of it and also how they feel about it. How did they solve it, how did they relate to it. You will learn from second hand experience and at this point you may also find it makes sense to start another project together with someone else to learn what kind of people you like working together with, i.e. find your pleasures and frustrations working together with someone else. Keep asking yourself the same questions, look for answers, keep discovering yourself within the craft.

If you talk to an artist they will tell you they are expected to make 5000 bad drawings before they develop a consistently good style. Programming is a craft too. You will be using your own mental capacity as a tool to achieve specific goals. You get better at that by working out with those muscles, and not in any other way.

Got a weird one for ya. Do you play Kerbal Space Program? Well, there is a mod for it called KOS where instead of flying your rockets, you program them to fly. So there you have a goal or problem to solve, and you need to figure out how to achieve it.


http://ksp-kos.github.io/KOS_DOC/

If you are undecided on what you want to do, then I would recommend that you really focus on web design. I wouldn't worry so much about the back end stuff. Just focus on front end and design.

I work IT in real estate and every single new real estate agent and their dog just wants a pretty looking website and they are willing to pay out the nose for it.

I would also suggest that you look closer at devops. With dev ops, you still get software, but you also get trained how to maintain hardware as well which will help diversify your job opportunities.

You should also start looking at salaries. If you like coding, then just go after what ever coding job gets you the most money. Or go after what ever languages you can learn to become an independent contractor.

I think that is my problem. i have a project i can make as complex as I want I think I am just going to work on that for now.

I read the whole thing a few times, I agree with everything you said, and will keep those as goals. I need to quit caring if other had done it before, i just need to solve the same problem on my own.

No I do not currently, that may get me into it. If I ever start to play it, I will defiantly install that mod.

I think this is what I am going to do for now, I have the basic of it like HTML CSS for the most part, really need work on javascript. I have a school project right now that is to make a web portfolio, a website to market myself to employers. It can be as simple or as complicated as I want, I think I am going to take the next few day off from the project and learn js from pluralsight or off you tube, i have a book on it as well may read though that.

I live an 1-3 hours from about 7 different lakes, all have huge real estate markets with new agents every day it seems. I will look into that as a place to start, did not really think about that.

You can check out this video series here, to get a feel for what you can do with KOS: https://www.youtube.com/playlist?list=PLhiX1gKc3-5z8Itsiv-iq_25ZAySlEbz7

The guy is a developer himself and he seems pretty sure that KOS is a good way to learn and get better at programming.

I guess it all really depends on how you see programming. Some people might suggest learn a language, get really good at it, become a developer and cash out. I can't argue with that, but I see it a bit different.

Programming is just a tool to me. Think of it like a carpenter and a miter saw. There's no carpenter who's a "miter saw specialist." They have to know how to hammer, measure, plan, problem solve, have vision, and be pragmatic. He just uses the miter saw to make his angle cuts.

For me the same applies with programming. I'm not ever going to write the next version of TLS. But I will write a bash script to parse out 18,000 accounts that no longer need to be maintained. Or use powershell to solve the proverbial needle in a haystack of finding handful of accounts that need attention from a pool of 40,000. I'm continually writing locally hosted web apps which each do one small task that previously someone would call me to do. Now I just send them the link and viola, enduser can accomplish the task. Take the librarian who for the life of her could not properly format URLs for a proxy server. I built a shitty webpage with a text field, submit button and a JavaScript which allowed her to paste the URL, hit submit and the JS generated the formatted URL. That's 15 less help tickets a year.

Personally, I write a lot of perl, shell, HTML - I like writing Ruby, I need to work on my php, write SQL queries, use GNU utils a lot to debug network issues and to track down phishing sites- automate emails.

Here's a possible idea. If you're good at fixing computers, consider building a small web app with a web GUI that backends to a mariadb to keep track of the computer repairs you do. Like it creates a case number, enter their name, contact info, computer s/n, description of problem and a place to describe how you fixed it. You can then program a way to query your DB and display it formatted to a preformatted HTML page. Heck, do it with a MEAN stack, go crazy.

Keep in mind - this is coming from a rookie. I program because it's useful, not because it's sexy or glamorous or for the door sign outside my office that says "Jr Developer". Maybe that will resonate with you, because being able to program is just as useful as being able to read output of an strace to identify why it's taking so long for a command to create a system account.

Best of luck /end of rambling...

Will watch this, my favorite none tech YouTuber is doping a series will fills it's place, may buy the game have a friend that wants to play it as of yesterday so perfect timing.

I see in in a very similar way. Just always thought in a different simile, I away have thought of programming as an art, where the language are the bush and the programmer is the artist needing to know different styles.

I am doing something kind of like that, it more design than function, but before yesterday I didn't know JavaScript other than very basic syntax (it feels very similar to C++ and Java, like from what I have noticed any C influenced languages), now I am working on learning to navigate the DOM and started to learn syntax for jQuery (so much easier to get things done with for me). Some else mentioned real-estate agents pay a lot for websites that look nice and works well, I just so happen to have I think 6 or 7 lakes around me that have real-estate agents that seem to go and come every week. So my current idea is to build my own website show my skills with web design and photography and see if I can lande some jobs while I am still doing classes in college.