help me improve
16 10 Jan 2016 05:45 by u/generatedname
Short version about me:
I have been programming for 18 years (since I was preteen), starting with Quick Basic. I am mostly self-taught and stopped going to college after 2 years because it wasn't worth the money for how little I learned. I have learned to do practical single-programmer coding for VB 3 through 7, C# with and without WPF, a little bit of asp.net, java, php, and C++.
I want to be more familiar with team-centered coding (which have benefits for solo projects) like implementing patterns, optimizing for hardware, and anything else that can be considered advanced. My interests currently are C# and any popular game engines (Unity, Unreal, etc).
Please recommend me some books or other resources. On the cheap!
6 comments
4 u/stolencatkarma 10 Jan 2016 07:07
if your into games try doing the 1 week rouge-like challenge. you have one week to make a rouge-like game such as nethack.
here's some engines to give you a head start- http://www.roguebasin.com/index.php?title=Roguelike_engine
2 u/Gamio 10 Jan 2016 12:00
Unity's scripting component, if I remember right, is Mono which is essentially C# by another name. Might be worth your time tinkering around with it and get comfortable with it, then try to poke around inside Unitys community offering some free time and expertise to anyone willing to let to let you contribute and take things as far as you can from there. It might put you on a path towards that team-centered coding familiarity you want.
Unity has oodles of documentation, guides, how to's etc and its free for personal use, can't get cheaper than that.
1 u/elcob32 10 Jan 2016 17:55
Mono would more accurately be described as an open source implementation of C#. I actually have a similar background as OP, and was here to recommend a transition to open source. I learned a lot from the experience, and as Microsoft is now moving to a position that is more friendly with open source (in fact they are even working with the team at Xamarin to improve Mono), it is not a bad idea for OP to position himself as a developer who can port existing code from a Microsoft back-end to an open source back-end.
1 u/NervousHorse 10 Jan 2016 13:19
For optimizing games there are profilers that tell you which parts of the code take the most of the processing time so you can focus on improving those. (It seems Unity comes with one.)
1 u/tribblepuncher 10 Jan 2016 13:55
While you can do all kinds of studying on your own, if you are so inclined, team programming on your own is pretty darn hard to do, basically by definition. I would suggest you consider contributing to an open source project to better learn how to function in such an environment. AFAIK a lot of them welcome contributors from many different skill levels. You should also look up software engineering in general - a lot of that is group and process management, especially involving the various methods of implementing the software development life cycle ("waterfall" model, "spiral" model, and agile methods come to mind, but it's been a long time since I've looked this stuff up). In fact, software engineering seems to be a lot of what you're looking for in general.
In terms of "advanced" you may want to investigate algorithms and languages (e.g. how a computer processes programming languages). This will be more difficult without support of faculty, but it is not impossible. Hardware optimization may be harder, though, since hardware is a moving target, so the techniques you learn now may be useless in a few years, and the generalized methods for teaching it are not exactly the highest priority items in a lot of cases. If you want to get a better idea of how the machine works, I would strongly recommend you consider assembly language - despite people decrying it as fit only for barbarians, it lets you see how the computer works in great detail, and that will probably help you out. Another thing would be to learn C, specifically so you can learn about things such as resource management (particularly memory). Languages such as C# try to hide a lot of complexity from you; this is both a good and bad thing. Good in that in most cases you don't have to worry about it, bad in that when something isn't working right you don't even know where to start, let alone how to address it, and you also know enough to know you may need to design or code around nasty gotchas.