So like
@holnrew I'd often think that I'd be a decent coder. I've got some experience with Python, LUA, and C#, but I'm a long way off being able to do it for employment. But when I do do it, I really like the sense of achievement you get when you crack a problem.
But what I really lack is focus and direction. Because I don't have a set of jobs to do, I just stare at VS and my mind draws a blank. How do other coders overcome this?
Are there any training routes I should explore? Bearing in mind I just had a child and I'm drowning in mortgage repayments - can't afford to go back to uni !
Comments
I didn't speak to them but your thread has reminded me that I saw them.
Makers Academy. 'Learn to Code in 12 weeks' is the claim.
http://www.makersacademy.com/?utm_source=newscientist&utm_medium=website%20&utm_campaign=newscientist
edit: not cheap though!
If there's something you'd really like to have made, dig about and see what tech you think you'd be able to work out how to do it with and go that route initially. It'll be tough, so you need to feel like you'll definitely have a sense of achievement when you get there.
If that's making a shiny iOS app, get Swift and either Apple's own great documentation, or something like an Udemy course then see where that takes you
Or it it's a standalone piece of software or web application then maybe C# is the starting point - but decide what you want to create and follow the path that leads you down.
Speaking as someone who has had to find and hire devs over the years, the ones who jump out at you (qualifications be damned) are those who you can see love getting it done, solving problems, who probably spend what little free time they have on personal projects - these are valuable people who get snapped up.
Perhaps there's something that you regularly have to do which you'd like to automate?
Or is there something you've already automated for yourself that others would benefit from, if you could customise it for them?
Remember that buggering up is essential to learning good methodology.
If you have an actual idea and just need to know how to start then drawing out the structure at a high level on paper and then scribbling out some psuedocode can help work out what the components are going to be and whihc ones you should start with.
If you use BDD or TDD that can also help you get started as it is often easier to write an acceptance test than some code and at each stage the amount of code you are writing is the bare minimum to make a test pass.
try the usual code academy/free code camp for an intro, they are pretty good for trying out.
Syntax wise, C# and java can be very similar, so you'll know more java than you think!
Feedback
Very similar concepts, I treat them as the same thing.
The idea is that you write some code which describes the inputs to a piece of software, then triggers an action, then checks the output meets an expectation.
So, without implementing the actual logic code that takes your input, responds to the action, and generates the output.
This code you've written is essentially an automated "test". It's advised that you pick a really simple starting point and add further "tests" to gradually introduce the complexity you need.
There are a multitude of benefits to this.
* The first benefit, IMHO, is that you are forced to think about what your system needs in order to do a job, and you start to define names for things. As you add tests you'll begin to settle on ideas about data types, and code structure.
* Another key benefit is that you can run that test code and it will produce a FAIL/RED status until you've written the code to satisfy it, and then it produces a SUCCESS/GREEN status. This gives you a reliable mechanism which is also fast to execute, so you get rapid feedback about the state of your code.
* As you add more tests, you're effectively building a suite of tests which will give you peace of mind whenever you make changes to the code.
By contrast when I'm working on the nasty legacy bits that are too intertwined to TDD properly without refactoring half the universe I often spend ages coding away on something with no feedback until the end only to find out when it's done that there are loads of problems I need to go back and address.
Half of the spreadsheets I've encountered at work have no place in a a spreadsheet and should be proper database based applications
To become a really good coder you need to take on substantial challenges that do real things.
I like writing games. I wrote a shoot em up to learn HTML5 canvas, a Noughts and Crosses game when I was learning Haskell and I recently wrote a Sudoku solver in Go and then again in NodeJS with Lodash.
I've written several things in Excel using VBA that should never have been written in Excel. It's just that if IT and procurement get involved it will take months and probably cost around £30,000. I can write something in a few weeks in Excel and the cost of my wages is about tenth of what it would cost to do it properly given all the idiocies of IT procurement in the public sector.
More recently we've been using Powershell for things it was never intended for. We can't (officially) run it on our networked desktops because of security so we have to RDP onto a remote server. We're using it to crunch through data files and pre-process them before they get loaded into the official software so they don't crash it, or cause glitches. Again, it's a few days of my time (or a colleagues time) or thousands of pounds to the supplier getting the software fixed, months of waiting, and thousands more for our IT department to test it before they will let us use it.
You end up solving problems in the easiest way possible even if it isn't the "correct" way.
Feedback
Obviously, green field work is more suited to TDD because you can choose your starting point and incremental requirements to suit your approach to designing the software.