Jump to content


Check out our Community Blogs

Register and join over 40,000 other developers!


Recent Status Updates

View All Updates

Photo
- - - - -

Stuck learning programming, need help in where to head next.

learn beginner intermediate guidance general

This topic has been archived. This means that you cannot reply to this topic.
13 replies to this topic

#1 ANXHaruhi

ANXHaruhi

    CC Lurker

  • New Member
  • Pip
  • 6 posts

Posted 05 September 2015 - 10:29 AM

Hello, my question is more general than usual, think this is the appropiate forum to post it. Thing is I've been learning programming almost completely on my own and for a while now I'm facing a wall where I simply don't know what to do with it and can't find how to break through it. Wall is that I know that I should have enough knowledge to be able to build something from the ground up but the more I try it the more confused and lost I seem to be. Think that a decent analogy would be that I know a set of basic tools, how they work, and have used them in really small projects to learn them, how they complement each other and I should be able to make a crappy chair but cannot make it, completely lost on things like "Where to start?" "What are the possible options that will lead me to build it?" "Should I start here or there?" or "Am I really building a chair or am I failing at it and don't even know yet?" or stepping it up and start thinking "Do I really have the basic knowledge to build it?".

 

Searching and reading around the web did not help much either (that or I am asking the wrong questions to Google), the only thing I was able to find about it that gets near it is this blog post post on vikingcodeschool. Nails that feeling, think the point I am is at the beginning of the second phase (don't know how accurate is that classification). I've been checking different programming languages, Python based on MIT edX courses, 6.00.1x and 6.00.2x (foundations of Computer Science, planning to do the whole XSeries course), C++ based on this book, 'Jumping into C++' and only more or less recently dabbling with C# using Rob Miles C# Programming Yellow Book as a start. Reason for checking C# and start with yet another language is due to the seemingly consensus in that documentation is really good and easy to browse thanks to MS, and that should help for learning. I think I have most of the basics covered, from basic general knowledge, to proper class structure and inheritance and the dangers of overusing them, abstraction and interfaces, general data structures, like binary trees or hash tables, the importance of testing, basics on debugging and where to look when you have to debug and that it will take me a lot of time and thousand bugs to practice so I don't suck at debugging. Oh and not forgetting the whole, write proper documentation, write good code that explains itself and comment your code.

 

As far as I've seen no matter the approach I can't move past this wall. Think my best progress so far was to be able to build a 2 player TicTacToe console game on C++ (no IA or something fancy like that) and I am still wondering how did I managed to get it working (it was incredibly fun and frustrating at the same time to build though). Maybe I am not really ready yet to buiild from scratch or I am just lost. So any pointers on where I could be failing, and where should I head next based on what I know? Any resources that can assist? Should I stick with any of the 3 already mentioned languages? Projects that could be good to grasp how to start? Doesn't matter if it is time consuming, involves learning another 3 programming languages or whatever is needed. I enjoy too much programming and the whole problem solving aspect of it to not keep pushing forward and if possible make a career out of it (if possible on videogames). Thanks for the help and sorry with the long post, I can't properly explain it in less words.



#2 lespauled

lespauled

    CC Leader

  • Expert Member
  • PipPipPipPipPipPipPip
  • 1360 posts

Posted 08 September 2015 - 06:37 AM

I only got through the first paragraph.   :-P

 

When starting out, I do NOT recommend you try to learn more than one language at a time.  Although they are related, it will be easier for you to solidly learn one, and then you will be able to relate the changes in the language from one to the other, thus making the transition easier.

 

If you feel you have the skills to complete the task, break down the large task into little tasks like an architect and/or a project manager would.  This will serve 2 purposes:

 

1) give you a road map to follow throughout the project.

 

2) figure out best ways to do things and fix bugs in logic, before ever writing a single line of code.

 

 

From an architect standpoint, figure out if you're using an n-tier approach.  

 

- Have all database operations in it's own tier (data tier)

- business tier that calls the data tier and the UI and keeps any complexity from the front end( UI )

- User Interface (UI) that only makes calls to the business tier, never calls the data tier.  In fact, it shouldn't know (or care) where the data is coming from or going to .

 

This may be overkill for small projects, but once you use this method, you will see the benefits of it.  The UI on;y handles UI related things, the business tier contains any business logic, as well as being a liaison from the data tier to the UI..


My Blog: http://forum.codecal...699-blog-77241/
"Women and Music: I'm always amazed by other people's choices." - David Lee Roth

#3 Gikoskos

Gikoskos

    CC Newcomer

  • Member
  • PipPip
  • 21 posts

Posted 08 September 2015 - 09:46 AM

Every coder has probably had the same thoughts, at an early point of their education, as you had.

 

The thing is you should always want more, never leave yourself satisfied. Expand on ideas, on projects and never leave something thinking that it's finished. For example you mentioned a Tic Tac Toe game which is an excellent beginner's project. Try expanding that; add RPG elements, a player leveling up and stuff, maybe add bigger than 3x3 boards if the player levels up. Ideas are only limited by your imagination, not by your skills.

 

You have to understand that no coder ever, learned and understood programming just by reading books and seeing tutorials. These are all good if you want to expand your knowledge.

If you're getting started, you should always just start with a project.

 

Just start from somewhere. A game, a command line utility; anything really. If you encounter a problem while you're writing your code, google it. You forgot how to read a file? Google it. You forgot how to do pointer math? Google it. That way you learn by doing and it's a flawless practice really.

 

The more different programs you do, the more you learn. That's why work experience in programming jobs is measured by years and not by how many books you've read or degrees you have. Knowledge in this field is measured by the amount of hours you have spent thinking over problems, googling solutions and checking manuals.



#4 ANXHaruhi

ANXHaruhi

    CC Lurker

  • New Member
  • Pip
  • 6 posts

Posted 08 September 2015 - 09:12 PM

Just start from somewhere.

 

That's the whole problem, the start. I know that learning to code is practice more than theory. And I've seen that advice a lot around almost everywhere, but that does not help. I've noticed through 6.00.2x that if someone tells me to go ahead and make something according to certain well-laid specifications I have little problems starting and going foward from that point. Where to start and how to actually get from a vague idea (a notepad or a console based text game for example) to something that you can actually say 'Well, time to figure how I have to fix this specific problem'. Somehow I can't fully wrap my mind around that. Thing with the Tic Tac Toe game (asides being coded horrendously, but coming from a newbie is to be expected) is that the exercise, while not long, was somewhat specific: 'Here do this game, it should have at least this, this and this', and with that it was not that hard to do the small project 'fast' (still took me some time :laugh:).

 

 

I only got through the first paragraph.   :-P

 

When starting out, I do NOT recommend you try to learn more than one language at a time.  Although they are related, it will be easier for you to solidly learn one, and then you will be able to relate the changes in the language from one to the other, thus making the transition easier.

 

Can't blame you (or anyone for that matter), next time I'll add a TL:DR :blushing: That said, I'll fully focus on C++ then, is the one I feel more confortable with. Is there any specific topics that I should focus as beginner-high/intermediate?

 

 

If you feel you have the skills to complete the task, break down the large task into little tasks like an architect and/or a project manager would.  This will serve 2 purposes:

 

1) give you a road map to follow throughout the project.

 

2) figure out best ways to do things and fix bugs in logic, before ever writing a single line of code.

 

Any resources that touches all of this, more in depth maybe? Or some keywords for this topics, so I can get searching. Also been reading a bit the n-tier approach, first time touching this kind of topic. So far has been interesting and while certainly can be overkill, having good design practices from the start doesn't hurt.

 

Also on a more general note thanks for the help, much appreciated!



#5 WingedPanther73

WingedPanther73

    A spammer's worst nightmare

  • Moderator
  • 17757 posts

Posted 09 September 2015 - 04:39 AM

The first few projects I made, I had to sit down and map out a general structure of the program. For example, I designed a program to make a game engine for playing Go (works for Chess, checkers, etc) where I defined pieces, the board, the game (state of board, whose turn it is, etc), what a turn is, etc. I identified points of logic that had to occur, interfaces between the board and pieces, etc.

 

Our problem when we start programming is we tend to want to jump from the trivial problems we get in textbooks to "interesting" problems. You know, like going from making a PHP webpage that validates an email form to building an entire forum for Codecall.  What nobody ever tells us is that designing a LARGE program is an additional skill beyond knowing the language. It's the reason why junior developers implement methods, while senior developers design classes.


Programming is a branch of mathematics.
My CodeCall Blog | My Personal Blog

My MineCraft server site: http://banishedwings.enjin.com/


#6 ANXHaruhi

ANXHaruhi

    CC Lurker

  • New Member
  • Pip
  • 6 posts

Posted 10 September 2015 - 07:50 PM

The first few projects I made, I had to sit down and map out a general structure of the program. For example, I designed a program to make a game engine for playing Go (works for Chess, checkers, etc) where I defined pieces, the board, the game (state of board, whose turn it is, etc), what a turn is, etc. I identified points of logic that had to occur, interfaces between the board and pieces, etc.

 

Our problem when we start programming is we tend to want to jump from the trivial problems we get in textbooks to "interesting" problems. You know, like going from making a PHP webpage that validates an email form to building an entire forum for Codecall.  What nobody ever tells us is that designing a LARGE program is an additional skill beyond knowing the language. It's the reason why junior developers implement methods, while senior developers design classes.

 

I've been reading about these topics these days, like the differences about the skill level from junior to senior developers (didn't know that there was more than just being a 'developer') and now I understand a bit more the 'Just start from somewhere' that always seems to pop up. It made me realize that I have been a bit naive, trying to jump from simple examples to do the 'next big thing' when I'm certainly not capable of.

 

At least now I know (or at least think I know) where I'm standing and where to point at. Maybe this question sounds strange but it bugs me a little: Is there any way to notice myself if I'm currently working on something out of reach, or should I just push forward with the diverse projects I think until either being succesful or failing while attmepting it? Maybe both will happen? Just to know what kind of frustration to expect while going along the way. Again, thanks for the help, seems that getting slapped in the face with the sentence 'Reality that you didn't know' was what I needed.



#7 WingedPanther73

WingedPanther73

    A spammer's worst nightmare

  • Moderator
  • 17757 posts

Posted 11 September 2015 - 04:49 AM

If you look at a problem for a couple days and are still at the "I have no bloody clue" stage, you're reaching too far. With that said, I inherited a medium-sized web project as part of my job. After doing bug fixes and extensions on it for a while, I suddenly realized that I "knew" how to build much larger projects.

Now, what you may need is something to kick-start how to think about larger projects. I put together a tutorial series a while back that may help you out.

http://forum.codecal...project-part-1/

http://forum.codecal...project-part-2/

http://forum.codecal...project-part-3/

http://forum.codecal...project-part-4/

http://forum.codecal...project-part-5/

http://forum.codecal...project-part-6/

 

The language is PHP/Javascript, but what you should probably focus on is the concepts of how to design a big project. There are a lot more pieces you have to put together than on a project where you open your favorite editor and start banging out code.


Programming is a branch of mathematics.
My CodeCall Blog | My Personal Blog

My MineCraft server site: http://banishedwings.enjin.com/


#8 ANXHaruhi

ANXHaruhi

    CC Lurker

  • New Member
  • Pip
  • 6 posts

Posted 12 September 2015 - 01:55 AM

If you look at a problem for a couple days and are still at the "I have no bloody clue" stage, you're reaching too far. With that said, I inherited a medium-sized web project as part of my job. After doing bug fixes and extensions on it for a while, I suddenly realized that I "knew" how to build much larger projects.

Now, what you may need is something to kick-start how to think about larger projects. I put together a tutorial series a while back that may help you out.

http://forum.codecal...project-part-1/

http://forum.codecal...project-part-2/

http://forum.codecal...project-part-3/

http://forum.codecal...project-part-4/

http://forum.codecal...project-part-5/

http://forum.codecal...project-part-6/

 

The language is PHP/Javascript, but what you should probably focus on is the concepts of how to design a big project. There are a lot more pieces you have to put together than on a project where you open your favorite editor and start banging out code.

And indeed it showed quite a few things that I was doing completely wrong when thinking about doing larger projects. After dissecting what I've been doing, combined with your tutorial series, specially focusing how and why you've done it shows clearly how I just didn't saw the big picute and completely missed the point.

 

First mostly ignoring a proper design phase. After checking how it was laid out it was clear both what it was trying to accomplish, and what more generally what work should be done. A mental map doesn't do much if it is not laid out. And I can see that I was not giving enought credit to it.

 

Secondly, trying to go for the home run and nailing whatever I'm working at the first pass, when I should start with something rought and from there polishing and improving it. Get the rought basics done and working and improve from there, instead of trying to do some sort of black magic to make everything perfect from the get go.

 

Third, implement as you need. No point in implementing the database before having even a proper website, no point in implementing how to submit stories if you can't even register. No point in doing check win condition logic on tictactoe if you can't move or even show the board.

 

Fourth use the tools at your disposal. Write tests instead of using prints to fix bugs, and you can use them later when you improve that implementation, tying with the second point. Use more the debugger. Use your tools properly so you can focus on what you are doing.

 

Probably missing a lot, but think I'm off to a decent start. Time to learn a bit more about an IDE than just text editor with a convenient Run button, start with some simple projects and start reading a lot more code tan I actually read. Really thanks for the help



#9 WingedPanther73

WingedPanther73

    A spammer's worst nightmare

  • Moderator
  • 17757 posts

Posted 12 September 2015 - 01:31 PM

WOOOT!

You got it. The unfortunate reality is that good, talented programmers go through classes and quickly learn NOT to plan. We're told to plan programs, but for someone with talent for it, we can look at most problems and immediately "see" the solution. At that point, there's nothing to plan :)

We learn that planning is for "those other people who don't know what they're doing," and then get completely blindsided when we actually have to plan things out. Something you may want to research is Test-Driven Development. I suspect it will help you focus on developing and testing the pieces.


Programming is a branch of mathematics.
My CodeCall Blog | My Personal Blog

My MineCraft server site: http://banishedwings.enjin.com/


#10 ANXHaruhi

ANXHaruhi

    CC Lurker

  • New Member
  • Pip
  • 6 posts

Posted 15 September 2015 - 05:36 AM

WOOOT!

You got it. The unfortunate reality is that good, talented programmers go through classes and quickly learn NOT to plan. We're told to plan programs, but for someone with talent for it, we can look at most problems and immediately "see" the solution. At that point, there's nothing to plan :)

We learn that planning is for "those other people who don't know what they're doing," and then get completely blindsided when we actually have to plan things out. Something you may want to research is Test-Driven Development. I suspect it will help you focus on developing and testing the pieces.

 

I'm not talented, mostly hard worker so I should have started planning from the beginning :laugh: Have to read more in depth on what constitutes a good test and how to properly design them, at the end of the day I relied too much on using print statements. And withouth them I cannot properly dig into test-driven development. What I was busy doing however is planning (or learning to more accurately). Think that a good starting project (not the most entertaining one, but hey noone started programming something like Doom) was a bank management software. Incredibly simple, only console, probably data saving/reading will be leff for the final thing to implement. So after checking a bank site I've come up with this as the first attempt at planning (which is probably on the awful side):

 

ss+(2015-09-15+at+01.40.02).png

 

Not the project itself, but is this kind of planning what I should be doing?



#11 WingedPanther73

WingedPanther73

    A spammer's worst nightmare

  • Moderator
  • 17757 posts

Posted 15 September 2015 - 02:49 PM

That sort of planning is definitely useful.

 

For Test-Driven Development, the idea is that you define the behavior of a method on a class, then you write a test that will validate the method produces the correct output for various inputs, then you work on the method until the test passes. Repeat for the next method, running all tests with each iteration. The goal is to automate your testing down to a  pass/fail result.


Programming is a branch of mathematics.
My CodeCall Blog | My Personal Blog

My MineCraft server site: http://banishedwings.enjin.com/


#12 ANXHaruhi

ANXHaruhi

    CC Lurker

  • New Member
  • Pip
  • 6 posts

Posted 22 September 2015 - 11:20 AM

And that is going to be hard. I'm quite a bit rusty with C++, it makes everything go slow. For example dealing with silly mistakes, getting lost in documentation and things that you should not do, like not accessing strings with [] and using iterators instead (at least based on quite some Stack Overflow questions about it). That without starting to write tests (that is the next thing I have to do now), It seems it is going to be one fun ride (or not depending on how you look at) Should I try to learn some tools like boost for doing the tests (never used code outside my own so I would have to learn first how to integrate it with my code) or just start with my own written manual tests and learn later down the line these kind of tools? I think learning those tools would be adding more weight than I can carry, but I may be completely wrong.






Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download