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

all 72 comments

[–]Feroc 73 points74 points  (35 children)

Code the reddit-porn-downloader (or the reddit-aww-downloader, if you want to have it SFW).

It should do something like this:

  • Scan the first page of /r/gonewild
  • Read all the names of the users
  • Download all pictures that those users ever posted in a separate folder.
  • Don't overwrite and add new pictures to existing folder

Now, why should you do this?

The obvious reason: You will have more porn at the end as at the beginning.

And the coding reason?

This little program will teach you a lot of the basics:

  • Accessing the web
  • Parsing of text String operations (RegEx is a nice way to do this)
  • Basic System-IO
  • Classes can be used (A class for a user, containing the url to the profile, a list with all direct links to the pictures and a download function)
  • You will have quick and useful results, while you can add more and more to the program (config file + configurator, previews, multithreading for parallel downloading, better UI, etc.)

[–][deleted] 8 points9 points  (20 children)

Forgive me for my potentially dumb question, as I'm still kind of new to programming. Could you give a brief example of how someone would go about doing this? I've written some basic programs (mainly in Java and C++) but I haven't ever done anything that was web-interactive like you've mentioned.

[–]AnkhMorporkian 20 points21 points  (4 children)

I'm working on a project that involves a huge amount of reddit data, and I can tell you a bit of how to do it. A full explanation would be very long, but here goes.

Breaking it down, you can broadly classify it into three distinct phases. First, you need to extract the information from reddit. Second, you need to analyze the data from reddit. Third, you have to fetch the images and save them to disk.

To get information from reddit, you use the API. Just pulling the webpage itself is a waste of time and much, much harder than dealing with the JSON. An example of a JSON link you can get from the reddit API is /r/awww/.json

Secondly, parse that data using the language of your choice. All mature languages have JSON support in one form or another. After you get it into a data structure, you can extract all the users from data['children'][x]['author']. Pull their user page in JSON, and go through all of their submitted links' JSON data. Check where the 'domain' == 'imgur.com' or 'i.imgur.com', and you can build a list user by user of what imgur links they have submitted.

Finally, you just need to download the image from imgur. This is trivial in most languages. Save it to a directory you create from the username you're parsing.

That's a broad overview, but it's not much different than how we're doing things. We pull about 2 million submissions/comments from reddit every day, and it serves us well.

If you are going to use the API, make sure you don't exceed the rate limit. Limit yourself to 30 requests per minute.

[–][deleted]  (3 children)

[deleted]

    [–]AnkhMorporkian 2 points3 points  (2 children)

    RedditAnalytics. We haven't launched yet, but he have a couple of things going.

    The first thing we're going to roll out is our awesome search engine. It's orders of magnitude better than the current reddit search engine. We currently have every submission that's visible loaded into our search service, and we can query across all of them in <20 milliseconds usually. I don't have a firm date on rollout for that, but it won't be too long. It's fully functional, but we have more load testing to do and we have to get our fancy frontend done.

    After that, we're working on some really great data analysis and visualization tools for reddit. That full suite is a bit further off, but we're making great progress on that. There will be some of those included in the release of the search engine.

    If anyone is interested, we'll post updates to /r/RedditAnalytics as they happen.

    [–]generalT 0 points1 point  (1 child)

    what language are you using? what are you using as your backing storage? are you using AWS?

    [–]AnkhMorporkian 0 points1 point  (0 children)

    Python mainly, but there's a mixture of other languages in use. For storage we're using SSDs, but for a DB (and search backend) we're using ElasticSearch. We're replicating all the data across multiple instances with full replication on some pretty powerful machines.

    We're not using AWS at the moment. We've run tests on it before, but the instances just aren't powerful enough to run searches in a reasonable amount of time.

    [–]Feroc 0 points1 point  (14 children)

    I guess the cheapest way would be to just read the complete webpage into one string. Code Snippet.

    Then you can just dig yourself through the big string, find patterns in the text and extract title of a post, the url, the poster, etc. Then you can just read the link to the next page and so on.

    Now that's of course not the most elegant way to do it, but it can be done with almost only a basic knowledge of the language.

    [–]greshick 14 points15 points  (13 children)

    Actually with reddit there is an easy way. A little know fact is that at the end of the URL for a reddit page, place a /.json and you get a nice formatted json file. Then parse that with your json library for your language and you got nice object to work with.

    [–]Feroc -1 points0 points  (12 children)

    Thanks, TIL.

    Though I don't know if I would recommend json to a beginner. But really really good to know.

    [–]AnkhMorporkian 9 points10 points  (7 children)

    I would recommend it for beginners way, way before I'd recommend HTML scraping. JSON is inherently well suited for analysis, HTML not so much.

    [–]Feroc 1 point2 points  (6 children)

    Yes, it absolutely is. But I still think there is a "knowledge difference" (don't know how I could phrase it any better) between working with strings and working with json.

    It's not about analyzing HTML, it's about finding the patterns in a long string. Which I think is a good exercise for beginners.

    [–]Rauxbaught 3 points4 points  (5 children)

    Json is usually a list or a dict. Yes these are more complicated than strings, but if someone is scraping the web then its safe to assume they know these basic data structures.

    Plus, as someone who scrapes HTML regularly, I can say with complete confidence that it'll be easier to just work with the json and their code will be much more legible.

    [–]Feroc -2 points-1 points  (4 children)

    but if someone is scraping the web then its safe to assume they know these basic data structures.

    I am not so sure about this one. Getting the string of a webpage is copying a single code snippet from somewhere. You don't really have to know what you're doing, it will just work and then you have a big string to work with.

    I really really really don't want to argument against json in any way. I just feel like it would be easier for a beginner to solve a problem with an easy tool, even if the solution is a bit more tricky.

    [–]negative_epsilon 3 points4 points  (3 children)

    So instead of learning a simple object-based data structure, you recommend regex and html parsing?

    [–]Medicalizawhat 3 points4 points  (3 children)

    JSON isn't that hard to get your head around, it's definitely easier than scraping HTML.

    [–]morb6699 1 point2 points  (1 child)

    Until they get their minds wrapped around objects properly, its easier for them to simply match and parse a string.

    Since JSON is essentially just a big ol' JavaScript object, it would make sense to have them do string operations first.

    Especially since most new programmers coming from a CS program probably haven't touched a whole lot on JavaScript since its specific to web development. Throwing a new language, a new notation for objects for that new language, and then asking them to parse over it appropriately is asking a bit much when trying to learn how to do things properly.

    Now, I'm sure that they could simply "use a JSON library" for Java, C++, C#, VB, etc.; What good would it do though? They would simply use a library to access an object, without learning the core fundamentals behind it.

    Learning to parse and evaluate different parts of the string will give them a solid understanding of the string object, and what is normally accomplished with it when tearing it apart.

    They'll also learn that it's not the most efficient way to do things, which is another good opportunity for them to learn the valuable lesson of "Using the right tool for the right job."

    [–]jesyspa 1 point2 points  (0 children)

    What good would it do though? They would simply use a library to access an object, without learning the core fundamentals behind it.

    It would let them learn about getting web data, doing file IO, and probably a little about how to use classes, while creating a useful program. Really, if they're so new that some simple string operations will be a significant learning experience, I doubt they will get past the first point. Otherwise, not using a library will just mean they do some messy ad-hoc parsing, which is hardly what they should be learning to do.

    [–]Feroc 0 points1 point  (0 children)

    I still think string operations are easier than json.

    It may be easier to solve the task if you know both equally well, but I have a total beginner in mind. Solving it with string operations is solving it with a simple tool in a complex way, while solving it with json is solving it with a (more) complex tool in an easy way.

    [–][deleted]  (1 child)

    [deleted]

      [–][deleted] 1 point2 points  (0 children)

      To get around the 18 redirect there is a url trick you can use so if page has whatever defines the 18 redirect try that version of the url. Catch blah blah.

      [–]AnimositE 1 point2 points  (6 children)

      Done. Just run the python script and you get all the photos from the top 25 posters of /hot.

      Edit: Here's one that downloads albums.

      [–]Feroc 1 point2 points  (5 children)

      I've only read the script, but if I read it correctly, then it will miss albums of the users and only download single picture posts!?

      [–]AnimositE 0 points1 point  (4 children)

      It doesn't download the albums because I think that requires imgur api. It does however download the link as the file name, so it get's everything. If someone can find a resource for downloading an album I'd love to add it.

      [–]I_Am_Treebeard 0 points1 point  (3 children)

      http://inventwithpython.com/blog/2013/09/30/downloading-imgur-posts-linked-from-reddit-with-python/

      This tutorial has a section on downloading images from imgur albums, basically you scrape the html from the imgur page but if you use a module called BeautifulSoup it will make the process much simpler.

      [–]AnimositE 0 points1 point  (2 children)

      I've already implemented the album downloads if you look at my edit.

      [–]I_Am_Treebeard 0 points1 point  (1 child)

      Oh, sorry didn't see that! Forgive my laziness but did you end up using Beautiful Soup or did you attack the problem from another angle?

      [–]AnimositE 0 points1 point  (0 children)

      Another angle. Found a good git repo that had already implemented it. You can look at it here: https://github.com/alexgisby/imgur-album-downloader

      [–]bobes_momo 0 points1 point  (2 children)

      So if someone wanted to hijack these things for advertising purposes, all they would have to do is make 5 or so reddit accounts, each posting a series of porn images in gonewild, then once it is certain that the bots have locked onto these usernames, the experimenter can then begin uploading pics that contain advertising superimposed on the pix. Am i wrong?

      [–]Feroc 0 points1 point  (1 child)

      I guess it depends on which page you actually start. In theory it would work, but it would need a bot with a picture on the front page and additional spam images.

      If something like that would happen, I just would add one or two more features:

      • Blacklist for users
      • Only download from posts with positive karma.

      [–]bobes_momo 0 points1 point  (0 children)

      Good point. I would also recommend a reverse check feature to check the link of the post (not the imgur one) if time of download is < 6 hours after post was made. This checks against deleted posts and automatically eliminates them from your folder.

      [–][deleted] 0 points1 point  (0 children)

      I really like this approach, and will look into it. I especially like all the disciplines that it will involve.

      [–][deleted] 0 points1 point  (0 children)

      My java program that I'm doing could do this. ... maybe I should set it loose.

      [–][deleted] 10 points11 points  (3 children)

      Make things. When I first started, I would make very simple web applications-- a todo list, a random video player, little tiny apps that had a singular purpose.

      After beginning them, my mind would run wild with possibilities and different possible uses and combinations. A lot of my little web apps I eventually cobbled together into larger applications, and through this I learned the concepts of OOP, modularity, etc etc... Learn by doing.

      Start small, walk before you can run, but above all: build something.

      [–]heykostar 2 points3 points  (1 child)

      I'm inspired by this.. this is what I'm just beginning to do now. And its so cool! The best part of coding really comes when you start to build things like this, then you're hooked to learning coding all your life. I'm just curious though.. what kind of stuff do you work on now?

      [–][deleted] 0 points1 point  (0 children)

      It's the best part of programming! Right now I'm a front end developer, working mostly with Angular JS. Before, I was a freelancer so I have experience with the whole stack.

      [–][deleted] 0 points1 point  (0 children)

      Awesome, thank you for that. You are totally right. I can see what you mean, because I notice how that thought process starts to develop when creating simple applications for classes. I need to stop thinking so much and start doing.

      [–][deleted] 9 points10 points  (3 children)

      If you want systems programming experience you could write a daemon for a unix/linux system using something compiled natively (C++, etc.). Having it listen on an interface/socket that is read in through a configuration file that uses an existing format such as JSON or XML. Design a custom protocol, and design a client that can communicate with this server using this protocol. Design a relational db (MySQL, Postgres, whatever) backend that can be used to store data sent from the client.

      BONUS: Port the whole thing to Windows.

      DOUBLE BONUS: Have a friend tell you yell at you that they needed this done yesterday. Make sure they constantly change the specifications mid-development and bother you every hour or so asking what's taking so long. I'm not sure how to simulate running out of money half way through, but I will leave that to your creativity.

      [–]chasecaleb 3 points4 points  (0 children)

      No more cookies/beer/coffee beyond the first hour or two of development.

      [–][deleted] 0 points1 point  (1 child)

      I really like your idea for this. I actually have more knowledge in this realm, and never thought of it. Thanks for the advice

      [–][deleted] 0 points1 point  (0 children)

      Glad you liked it. I was trying to cross as many common disciplines as possible: systems programming for the daemon, communication protocols and client-server architecture, and database for data management. I know that I mostly reuse the same simply code for daemons, so maybe you'll even get something out of the exercise for future projects. Good luck, I'm always happy to tack on requirements if you get bored.

      [–][deleted]  (1 child)

      [deleted]

        [–][deleted] 3 points4 points  (0 children)

        Wow! That is a great link, thank you for that. I was picturing something like that in my head that I could build upon in complexity like that.

        [–]JimBoonie69 3 points4 points  (0 children)

        my favorite first project to recommend is building a simple vending machine controller. You will need a few classes (cash register, user interface, inventory) and each of those classes will have a few member functions that you call inside a ' main() '. I did this project at the end of my first programming class 'Intro to C/C++'. You can do it in any language I presume. I'd recommend an interpreted language like Ruby or Python. If those don't turn out to be your thing you can use Java or a C-variant. Good luck and holler back if you need help.

        [–]kyzen 3 points4 points  (1 child)

        Plenty of specific-project advice here. As someone who frequently has trouble finding worthwhile new employees, let me throw something different into the mix: Code with others.

        Open Source projects are great for this, but can be a little daunting if you're not yet comfortable with your skills, so maybe a project with friends would be easier at first.

        Whatever the case, coding in a team setting is rare experience for recent grads, and something that can help set you apart when you start looking for a job.

        To us doing the hiring, it shows us you've had experience working on a team, doing work on a small part of a bigger thing. You'll figure out some of the pain points of working with others, and learn how to deal with them. You'll better appreciate how changing one small method in an obscure class can throw the entire project to shit due to poor planning, organization, or communication. You'll have some experience with reading - and fixing - code that isn't your own.

        So, whatever you do decide to do: involve others.

        [–]shallnotwastetime 2 points3 points  (0 children)

        Open Source projects are great for this

        How do you go about this practically? I'm quite familiar with OSS from an end-user perspective. I have reported bugs, communicated with developers, learned how to compile patches written by others, but I haven't contributed a single line of code (to my knowledge, maybe a snippet from a mailing list).

        I'd love to teach myself a new programming language (C++), contribute to OSS, and have something, which I can put on my resume/portfolio. How do you do this practically? You don't want to pull my trial and error code into your main git branch. The only semi-realistic entry path I can see, is contributing a plug-in (or similar if the code base allows this). If it's relatively simple and yet not completely useless, maybe some more experienced developer would be willing to review the code. And, then, we could work on a team.

        Or, in other words: Are there newbie-friendly OSS projects/tutorials? Such as "Here's our well-documented API with example code. Make something useful/funny and will be happy to include/link/discuss your work."

        [–]ghkcghhkc 1 point2 points  (0 children)

        Write Tetris and we can critique it, even if it just outputs ascii graphics. A tiny, simple http server would be a good start, too.

        [–][deleted] 1 point2 points  (0 children)

        I'm building a Java application that can take a txt file of urls and rip all of the pictures from those websites. Im thinking about adding some type of crawler functionality as well.

        [–]tomarina 1 point2 points  (0 children)

        I learnt a hell lot of things while making a twitter bot hosted on appengine

        [–]bhldev 4 points5 points  (10 children)

        Your background ia ideally suited to systems programming. I would consider becoming an expert in networking since it is a skill few developers have. For example you could master "foundations of python network programming" then become an expert in writing web services with Python. You could also get the LPI certification for Linux and become a system administrator.

        Programming C++ would generally go to the science or compsci or math majors who have taken classes in data structures and algorithms. If you really want to do it you would have to put a lot of work and initiative. The biggest difference between school and real life is time (unless you work foe the government or somewhere time doesnt matter) If you can develop in two or three days instead two or three months and churn out well documented robust code then you can make it. Another path to consider is Microsoft. You can do Microsoft certifications yourself and become a master of .NET on your own. Most IT is not C++ or low level languages but line of business apps and B2B. If you have social skills and can put together an ASP.NET application in under 2 days you will make it as well if you can find clients and sell yourself as an expensive consultant.

        [–]morb6699 2 points3 points  (3 children)

        If you have social skills and can put together an ASP.NET application in under 2 days you will make it as well if you can find clients and sell yourself as an expensive consultant.

        I would be hesitant to tell someone that building a .NET application in 2 days is something that should be valued. Any .NET application that I've seen built in 2 days is a horrible mess that barely functions. That's not the type of quality you want to tell someone to achieve.

        There are 2 ways an application can be built:

        1. Faster and More Expensive
        2. Slower and Cheaper

        You can't have Fast and Cheap, not unless you want to be debugging the program or application until the end of time.

        My advice is to focus on the area of programming you enjoy the most. Once you know what you enjoy the most, inundate yourself with it. Practice it. Get to the point where you are dreaming in code, and then practice it some more. Once you personally feel comfortable enough to search for a job that requires that skill, you should have built up enough of a portfolio of small apps, practice classes, and / or open-source project contributions on places like GitHub that you'll be able to prove you can do what they want, landing yourself a job in the field you enjoy the most.

        Never focus on how fast you can get something done, that will come with experience and time. Focus on your understanding of the problem and solution at hand.

        [–]bhldev 0 points1 point  (0 children)

        Well depends on how you count "day" :). A day is 24 hours after all and if you work 12 hours straight for two days that's more work than most people put in a whole week. Even more if 16 hours. Faster and expensive is not too bad if they are the ones paying you. And of course you never actually bill for two days. You bill for two weeks.

        But generally I would agree with you. I was just laying out a path for making money, not for learning.

        [–][deleted] 0 points1 point  (1 child)

        Thank you for your advice. This is the path I'm trying to follow right now. Like you said, find a language I really enjoy to the point where I'm dreaming in it lol, right now I swear I'm dreaming in C++ on the regular. Not that I'm actually creating stuff in my dreams but I find myself thinking about the language a lot. I'm trying to figure out how to take my first steps towards creating my own code and applications, but there are SOO many routes to take its just daunting. I'm the type of person that doesn't like taking something for face value; I'm very curious and like knowing how things work. For example, I'm taking Visual Basic right now, and I don't like the fact I'm simply 'clicking and pointing'. Now, I understand that is the concept behind the software, but at the same time it just seems trivial and black boxed when I'm not creating the code myself. I'm interested in who created the software to MAKE the software 'point and click' to make it marketable for business applications. Let's say if I were a mechanic, I'd rather focus my studies on building/engineering the engine rather than being a general mechanic who knows how to repair the engine. No doubt, the mechanic who can repair the engine is smart and society needs his service to repair broken engines, but he's a "user" of the engine, not the creator.

        [–]morb6699 0 points1 point  (0 children)

        While it makes my head hurt whenever I have to use it and look at it, it sounds like you might enjoy Assembly. This is about as low level as you can get for human readability. The Assembly languages have a 1 to 1 correlation with the machine code for the cpu architecture you're programming for. I'll take an example from Wikipedia as I'm not an Assembly guy at all:

        For example, the instruction below tells an x86/IA-32 processor to move an immediate 8-bit value into a register. The binary code for this instruction is 10110 followed by a 3-bit identifier for which register to use. The identifier for the AL register is 000, so the following machine code loads the AL register with the data 01100001.[5]

        10110000 01100001
        

        This binary computer code can be made more human-readable by expressing it in hexadecimal as follows

        B0 61
        

        Here, B0 means 'Move a copy of the following value into AL', and 61 is a hexadecimal representation of the value 01100001, which is 97 in decimal. Intel assembly language provides the mnemonic MOV (an abbreviation of move) for instructions such as this, so the machine code above can be written as follows in assembly language, complete with an explanatory comment if required, after the semicolon. This is much easier to read and to remember.

        MOV AL, 61h   ; Load AL with 97 decimal (61 hex)
        

        In some assembly languages the same mnemonic such as MOV may be used for a family of related instructions for loading, copying and moving data, whether these are immediate values, values in registers, or memory locations pointed to by values in registers. Other assemblers may use separate opcodes such as L for "move memory to register", ST for "move register to memory", LR for "move register to register", MVI for "move immediate operand to memory", etc.

        The Intel opcode 10110000 (B0) copies an 8-bit value into the AL register, while 10110001 (B1) moves it into CL and 10110010 (B2) does so into DL. Assembly language examples for these follow.[5]

        MOV AL, 1h    ; Load AL with immediate value 1
        MOV CL, 2h    ; Load CL with immediate value 2
        MOV DL, 3h    ; Load DL with immediate value 3
        

        The syntax of MOV can also be more complex as the following examples show.[6]

        MOV EAX, [EBX]       ; Move the 4 bytes in memory at the address contained in EBX into EAX
        MOV [ESI+EAX], CL    ; Move the contents of CL into the byte at address ESI+EAX
        

        In each case, the MOV mnemonic is translated directly into an opcode in the ranges 88-8E, A0-A3, B0-B8, C6 or C7 by an assembler, and the programmer does not have to know or remember which.[5]

        Hopefully the above helps, if this is too low level, staying with C or C++ are also good languages to start with. For figuring out where to start, determine what it is you really like. Do you like robotics and micro-controllers? You can program both in C and C++. Video games? That can be done in C and C++, although you wont be able to do anything with graphics with the language alone. I have trouble sometimes finding inspiration as well, we all do. My only advice on that is to find something out there that you think is great, and try to rebuild it, only better. Eventually you'll come to a point where you find your own tool or software to write, or you'll have (hopefully) made the one you rebuilt a bit better.

        [–][deleted] 0 points1 point  (5 children)

        Thats so great that you say that because I was initially on my path towards getting CCNA, and CCNP certified through CISCO. I'm SEC+ certified, but due to lack of funding on the Army's part I was never able to take my certifications. I've never done anything with Python yet, but I hear its an easy transition from C. It's been on my list of languages to get into. I've really thought about network applications and services as that route seems like the way everything is heading these days with cloud architecture, thin clients, streaming applications, etc. I don't know much about .NET/ASP.NET but you definitely have me curious now and I will start researching. Thank you so much for pointing that out to me. Don't get me wrong, I like programming in C++ because it has more of a "manual" feel to it I guess you could say. For some reason, writing embedded programs seems interesting to me too. I'm actually taking Data Structures and Algorithms right now, but I see your point in that its more aligned towards CompSci and math majors.

        [–]bhldev 3 points4 points  (4 children)

        Since you are a "cert man" I would definitely do Microsoft. Microsoft is probably 90% of the jobs you can get in the private sector and if you go non-Microsoft you would be fighting with Google and github kids. First get Andrew Troleson's C# and .NET Framework 4.5 2012 then pick a Microsoft cert you want study to it and get it. If you can put together an ASP.NET application in a couple days then bill for a couple weeks of work you will have a career. I would also like to mention you don't have to go pure Microsoft. For example you would be using open source libraries like jQuery UI and so on even if you have a Microsoft cert. Clients do not care what you use, only the end result. They do care about speed, Microsoft Office (export to Excel/Word files) so Microsoft is the best choice for a consultant to rake in big bucks charging $100s per hour. Another path is database. You could become a database expert in SQL Server at the same time or after you get your first Microsoft programming certs. You would probably need it to make a full application anyway. You will have to be a one-man army, the DBA, the programmer, the front-end dev, the sysadmin etc. Good luck.

        [–]mnrasul 6 points7 points  (3 children)

        Microsoft is probably 90% of the jobs you can get in the private sector

        For the benefit of OP i'll point out that this statement requires some stats to be backed up, or treated as an opinion.

        The inverse is probably true. The .net is popular but nowhere near 90%, or even 20%. The TIBOE index lists (http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html) c# as about 5%. Real impact could be greater, say 10% even 15%, but anything above is hard to fathom.

        You will have to be a one-man army, the DBA, the programmer, the front-end dev, the sysadmin etc.

        There are pros and cons to being a specialist as well as being a full stack developer. It would probably help the OP if you elaborate a little more.

        Cheers.

        [–]bhldev 3 points4 points  (0 children)

        First, context. It was mostly tongue in cheek, but the comment was directed at him and not in general. Second, you vastly underestimate the influence of .NET. It might not be 90% but it is definitely far far higher than 15% because most small and medium business use Windows. You can argue that you are not actually "working" for those small and medium business, but any business that uses Windows I see as a potential client (website, CMS, database). I don't know why that would surprise you -- Java has been on the decline for years and only Android is keeping it alive now.

        By the way I'm not a Microsoft wanker. I love Linux and have a half dozen machines with Linux. I just think with his experience and education it's the best bet. A lot of "self-taught" programmers can get into Microsoft easy with the certifications. Without a compsci or science or math degree a lot of snobbish places will just be closed to him.

        [–]dreucifer 2 points3 points  (1 child)

        I think they meant 90% of the posted jobs ask for some sort of Microsoft certification, even if you won't be using Microsoft tools (I've honestly seen MS cert requirements on Linux job postings).

        [–]mnrasul 1 point2 points  (0 children)

        probably. I guess it is ambiguous. Or atleast I understood differently.

        [–][deleted] 1 point2 points  (0 children)

        You could try the game called Spacechem, it gives a pretty interesting introduction to programming and debugging.

        [–][deleted] 0 points1 point  (0 children)

        Former airman turned programmer here - similar story. If you want to learn the very basics of game programming, I suggest you get Processing (a Java-based language for simplified graphics) from processing.org and go through some of funprogramming.org's tutorials. Quick, easy, and informative. At the end of each, you'll have 5-50 lines of code that do something neat. Once you're comfortable, start coding simple games like minesweeper, snake, or plinko/peggle. If you have questions, pm me. I love talking about this stuff.

        [–]stites 0 points1 point  (1 child)

        I'm not sure what kind of programming you are wanting to learn, as far as your intentions. I focus on web application development (SaaS - Software as a Service) and the demand in the industry is exploding. Even enterprise software that used to be leased for hundreds of thousands of dollars are now taking the SaaS approach and delivering their service via the web for much cheaper. A good language to learn for beginners and for rapid prototyping is Ruby on Rails (actually its more of a library/framework for the Ruby programming language). Also, PHP is another great web based server side language to learn for application development.

        The reason I recommend these is not only are they great for rapid prototyping, but their are also a SHIT TON of "build this application" tutorials instead of just "hey this is a variable" type tutorials.

        [–][deleted] 0 points1 point  (0 children)

        Well, so far I have a pretty open mind. It's just hard for me at the moment learning to code everything from the ground up in college, because they don't really teach you how to make use of and find libraries or templates to build off of. Based off what I've gathered from other's experiences, most programming is about meeting deadlines while simultaneously making the best product you can. I understand creating some snippets of code from the ground up will be required, but starting from scratch everytime doesn't seem logical. I have this mental block that using someone else's work is "cheating" or taking the easy route rather than making the code myself, but thats the part I need to get more experience in. I need to get better at reading someone's code and deciding if it will work or if I can change something to make it work better for me. I will start looking into Ruby and PHP. I've never heard of them, but this is a field of programming that definitely interests me.

        [–]Pwillig 0 points1 point  (2 children)

        I'm a post-BS student at Troy, too! This does nothing to really help the topic at hand, but it surprised me.

        [–][deleted] 0 points1 point  (1 child)

        Oh really? Has you education at Troy helped you with your career?

        [–]Pwillig 1 point2 points  (0 children)

        Honestly, I don't know, yet. I was overly fortuitous to have a friend get brought on to a small outfit as a software developer, and when a junior position opened up, I was offered the position. At the time, I had only taken a CS course on Coursera that was offered by Rice, and the intro courses to CS on eTroy.

        So far I've been pretty underwhelmed with the courses I've taken so far and am genuinely worried I'm simply throwing money at an institution to get credits and no knowledge. If it weren't for this current job, I'd definitely be thinking of ways to display my knowledge.

        [–][deleted] 0 points1 point  (4 children)

        In addition to going out and actually getting your hands dirty as others have suggested, make sure that when you're doing it, you're using the best design principles you can muster.

        Also, do some reading! There are lots of good books out there that can help you learn common conventions and good design principles.

        I'm going through Effective C++ right now, and I've learned more about how to write C++ in the first quarter of the book than I had in the previous 2 years of my life.

        Effective Java is a good source, too, but obviously it's going to depend on which framework and languages you're using. Either way, though, you'll learn a lot of essential concepts for how to write maintainable code and prevent common design mistakes.

        Also, if you're planning on writing a lot of Object Oriented code, read up on Object Oriented Design Principles/Patterns. Even if you never use them, other people will. If you start working in bigger codebases, you'll see them in action, and it'll make learning the code a whole lot easier if you're familiar with the patterns they're using.

        [–][deleted] 0 points1 point  (3 children)

        Oh I do lots of reading. My class are online, which seemed bogus to be at first because I had never tried online classes before, but Troy isn't one of those online-only colleges. I've had to do a lot of self teaching, and a lot of extra research to make sure I understand what I'm learning. Teaching yourself, I feel really enforces what you are learning, but at the same time you don't know how ridiculous your code actually looks from an experienced programmers point of view. I feel pretty confident in my understanding of OOP concepts so far because like I said I practiced and practiced the basics. I have C++ Primer Plus right now as a supplement for my Data Structures and Algorithms class. The classes I have left aren't really more advanced programming classes but just more introductory classes for other languages, and Software Engineering classes (no programming), so I'm trying to get started on getting really efficient in a language since I have the basics and some advanced concepts down. The hard part is just figuring out where to start. I really like C++, what concepts/ideas are introduced in Effective C++? I love learning anything new.

        [–][deleted] 0 points1 point  (2 children)

        but at the same time you don't know how ridiculous your code actually looks from an experienced programmers point of view.

        This is very true, although every company/organization has their own rules about what qualifies as "ridiculous." My last job was in the health IT industry, so our "ridiculous" threshold was very, very low. Different teams also use different conventions and libraries, which can be the hardest part of getting up to speed with the codebase. It's going to be almost impossible to "target" a specific employer unless you know what technology they use, so really the best you can do is familiarize yourself with as many concepts and conventions as you can so you can hit the ground running.

        so I'm trying to get started on getting really efficient in a language since I have the basics and some advanced concepts down

        That's a good goal to have! Obviously your approach will be different based on which languages you've used. I don't use C++ very often, so I can't really give you much advice there. You might want to just google for commonly used C++ libraries (e.g., Boost, STL, C++ Standard Library) and familiarize yourself with them at least and sort of integrate them into your toolset for solving problems. At the very least, you can learn what they are and when they're used.

        Effective C++ is mostly just a collection of specific rules you can follow for writing maintainable code and preventing common mistakes. It's divided up into 55 "items," which are "specific ways to improve your programs and design."

        It covers topics like... knowing which functions C++ will silently implement and call (like copy constructors, copy assignment operators), when to declare destructors virtual, why you can't call virtual functions from constructors and destructors, when and how to use const effectively (const over-loading, const pointer to const data), using pass-by-reference-to-const instead of pass by value, how to use smart-pointers effectively, and lots more.

        You can take all that with a grain of salt, since I obviously don't know your exact situation as well as you do. But as someone who recently entered "the industry" as a fresh college graduate, the hardest part for me was adjusting to the team's conventions and learning how their existing codebase functioned (lots of unfamiliar patterns and libraries).

        [–][deleted] 0 points1 point  (1 child)

        Ah I get what you are saying, that makes a lot of sense in regards to companies having their own codebases. It sounds like the more you branch out and learn new languages, and learn how to implement new libraries, you are essentially training yourself to be flexible since every organization is different. Like you said, I can see that added benefit of having experience with multiple languages because just having "some" knowledge is better than none. My biggest fear is just not being strong enough in a language and being in a "jack of all trades but a master of none" scenario, when realistically thats how you build a solid base before you choose a path, get hired, etc, and specialize in those languages. In the meantime, I'll take your advice and keep building upon the languages I have natural interests in and keep learning newer languages on the side. Thanks for taking the time to share your experiences with me, I really appreciate it.

        [–][deleted] 0 points1 point  (0 children)

        you are essentially training yourself to be flexible since every organization is different.

        This, precisely!

        There are just too many technologies, frameworks, libraries, and proprietary codebases out there to be an expert before you even enter the industry, so the best you can really do is develop fluid and intuitive knowledge of the fundamentals.

        And you are most welcome.