Register

Author Topic: .  (Read 1462 times)

little_shadow

  • Guest
.
« on: May 05, 2014, 07:47:14 AM »
.
« Last Edit: November 16, 2015, 05:42:18 AM by little_shadow »

SnowFire

  • DL
  • Denizen
  • *
  • Posts: 4964
    • View Profile
Re: Question about my major
« Reply #1 on: May 05, 2014, 06:01:28 PM »
Math/CS double major here.  I'm not 100% sure this is responsive to your question, but since as you note it's a vague & open-ended one, I'll say this.  There are, very roughly, two paradigms that you'll want to be at least somewhat good at each.

A) "Hacker."  Get stuff done, even if it's occasionally ugly.  To do this, you just need to code, and have it be for real use cases, not exercises in a book.  Start a Drupal website and mess around with PHP (which is the devil).  Make some tool for automating busywork.  Submit a patch to an open-source project and get it approved.  When you run into a problem, hit the APIs, and learn how to use other frameworks to get done what you want (in Java especially).  You won't necessarily know the "right" way to do something in advance, unlike coursework, so it's an entirely different kind of challenge.

B) "Computer scientist."  Your courses in college should hopefully cover this.  What is really going on when you write code?  What's a compiler?  What's the algorithmic runtime for this problem?  What are bottlenecks?  What are operating systems & background proccesses & all that?  What are known issues when architecting large systems?  What's automated testing?

jsh357

  • Denizen
  • *
  • Posts: 346
    • View Profile
Re: Question about my major
« Reply #2 on: May 05, 2014, 07:06:11 PM »
Preface: most of my experience is working in web development.  I am not a savant programmer or even a very good one, but I've kept my job and work well with others.

I was an English major but now I work as a "scrubby" programmer.  My experience has been that the most important thing is getting results.  Whatever kind of programming you have done, it's important to be able to adjust to whatever kind of programming you'll be DOING for your work--for instance, I didn't know anything about PHP going into my first job, but it was simple enough to catch on from knowing some C++ and being familiar with HTML and some javascript.  It's usually a team effort, too, so as much as you probably hate group projects in school (I know I did) the truth is you'll be doing those in a work environment a lot of the time so it's best to adjust.  Being able to understand other people's code is often more important than being able to write it. In both of the jobs I have had in this area, there was always that one guy in the group who was way better at coding than everyone else and knew everything about servers, random languages, compilers, had 4 monitors, and so on.  People who know how to do everything are extremely valuable, so if you do, great!

It seems like most of the people who apply for programming jobs are well qualified or adequate enough, so there is a ton of competition (fortunately there are lots of jobs available, which sort of makes up for it). 

If I had to recommend any pointers/things you should know:
- Git, or other similar tools
- Be really familiar with the basics like classes/inheritance/arrays, preferably to the point where you can write them from scratch without having to copy and paste much.  The basics are applicable to most languages.
- On that note, copying and pasting is your friend, not only because it saves you time, but because it helps standardize the code for everyone and keep things legible.
- Databases, especially if you are working in a web platform.  If you are, familiarize yourself with ajax..
- Again, if working with websites, absolutely learn to use jquery and CSS.  You'll have to anyway, but it's helpful to understand the syntax ahead of time.
- Understanding regular expressions is a huge bonus in probably any branch of programming; they make magical things happen.  I do not understand this voodoo myself, but people who do are like the master race.
- Learn to communicate with CEOs, marketing people, etc.  They do not speak the same language as you, but you will have to explain things to them in English.

Grefter

  • Villain.
  • DL
  • Denizen
  • *
  • Posts: 10386
  • True and Honest. Smarter. More aggressive.
    • View Profile
Re: Question about my major
« Reply #3 on: May 05, 2014, 09:53:45 PM »
Can't contribute much but will note.  Working in a team is significantly different than group work at university.  Accountability is much higher but has way less immediacy.  Do not let group work at University sour you to team projects in your professional career.  There is a lot of reasons for not wanting to work in a company that will make you part of a team (or even a large team), but the people should never ever be one of them.  People end up being awesome when they are actually working towards a joint goal.  They might not even be driven like you would expect a university student to be, but the vast majority of people at least DO their job.  There is always something you can learn from them, even if it is not directly related to the task at hand/role do.  It might be something about other people, how another area of the business works or a how a customer's business works and why they need whatever it is your work is related to.  Even could just be how to do things with people.

So yeah take group work at University with a grain of salt and a learning experience.  You will work with people in the real world.  You might work with people that do fuck all as well (or feel like they do fuck all), take what learnings you can and get through it.  It won't be like that in real life unless you try to run your own project with volunteers.
NO MORE POKEMON - Meeplelard.
The king perfect of the DL is and always will be Excal. - Superaielman
Don't worry, just jam it in anyway. - SirAlex
Gravellers are like, G-Unit - Trancey.

metroid composite

  • m_ACac
  • Administrator
  • Denizen
  • *
  • Posts: 4375
    • View Profile
Re: Question about my major
« Reply #4 on: May 06, 2014, 06:56:34 AM »
I was a math major, and somehow went straight from that to having a job as a programmer.

Hell if I know what CS majors are supposed to know, but every once in a while I want to know it, because I learned everything by getting my hands dirty :/

Getting your hands dirty and making stuff is good, though.

Grefter

  • Villain.
  • DL
  • Denizen
  • *
  • Posts: 10386
  • True and Honest. Smarter. More aggressive.
    • View Profile
Re: Question about my major
« Reply #5 on: May 12, 2014, 01:44:36 PM »
Don't mistake working in a team for the ability to talk to people and with confidence.  That helps and all, but all the speech in the world won't help you tolerate people's shit.  Won't help you explain something to someone for the fifth time.  Won't help you divide work up efficiently to who can do it best and recognise the strengths others have.

Talking is the easy part.  Not headbutting people is a hard part.  Delivering and coming out with a functional team that can work on the next thing is the hardest part.
NO MORE POKEMON - Meeplelard.
The king perfect of the DL is and always will be Excal. - Superaielman
Don't worry, just jam it in anyway. - SirAlex
Gravellers are like, G-Unit - Trancey.

Eternalspirit

  • Denizen
  • *
  • Posts: 32
    • View Profile
Re: Question about my major
« Reply #6 on: December 10, 2014, 01:41:13 PM »
Hey guys, forgive me for resurrecting this thread but I feel I have something to contribute to this conversation and not sure that a new thread is really appropriate for it.

little_shadow, before I say anything else, I just want you to know that I REALLY admire the drive and passion you seem to have with respect to CS. I used to work in video game development, and let me tell you, it is quite demanding mentally and time-wise, so good on you!

I will preface all of this by saying I only worked in the industry for about 2 years as a programmer.

That said, I feel the most important piece of advice anyone can give you is to keep up that passion you have. That passion, that drive to learn and hunger for more information is what will set you apart from everyone else in the industry. As has been noted, there are SO many people in this field competing for jobs, and they almost all have impressive educations, but not everyone has the willpower to do what it takes to win. You're on the right track with respect to participating in open source projects and whatnot, and getting involved in more of those things will further show your passion to prospective employers.

You also mentioned about a portfolio, and I'm going to expand on that by saying having a strong portfolio is CRITICAL. It can and will make or break you. I can only speak to this from the video games industry perspective, but everyone asked me either what I have been doing lately, or for a website where I could showcase what I've done. Nothing can replace being able to prove your skills through a portfolio (in many cases, this will be all employers will have to go by), and equally as important, your portfolio will also showcase how passionate you are about what you do as well. Make sure your highest quality work is on there.

Another piece that may be important to you (it certainly was for me) is having a strong LinkedIn profile. More and more employers and recruiters are using LinkedIn as a resource to prospect for employees, and there are tons of jobs listed on there as well. It is also a very easy way to expand your professional network, and something like 95% of jobs (please don't quote me on this!), at least in this industry, are filled though personal contacts. There is an old saying that goes "it's not what you know, but who you know", but there really is a lot of truth to it. If you're unfamiliar with LinkedIn, feel free to shoot me a message and I can try to help as best as I can.

The last thing I'll touch on before continuing is the point that was made earlier about being able to read other peoples' code. This is crucial!!!! Nothing wastes time in a team environment like programmers not being able to understand what their coworkers have done. I encourage you to look at complex pieces of code that you can find and try to break down how they work. You can make yourself indispensable wherever you go if you can demonstrate an ability to work efficiently, and this is just one aspect of it.

I'd also like to touch on some of the questions you had in your previous post, since it's been a while since you asked. To the original posters that said questions were directed to: if I have made a misrepresentation of a statement you have made, please forgive me! I will do my best to answer the questions as best as I can.

Quote
Could you go into greater depth on "real use cases"?

When it comes to creating small programs that you can show off to people that you do on your own time, it often is best to look at a real world problem and try to solve it.

If you're a genius, you can take a stab at some of these: http://en.wikipedia.org/wiki/List_of_unsolved_problems_in_computer_science

Otherwise, for me, the best way to describe what a "real use case" would be is to create a snippet of code that you could reasonably expect to use in a bigger, more relevant coding project. Let's say you were making a video game, and needed an algorithm to efficiently sort items in an inventory. That sorting system would fall under a real use case, at least to me.

There are tons of small example problems available on the internet as well that you can take a stab at, but unfortunately I am failing at Google today. :(

Quote
From what I've experienced so far, learning the "right" way to do something isn't as important as having a method for finding tolerably good ways to do things.  Workaround, in short, but ones which make it as easy, quick, and painless to do things.

It's amazing that you understand this now. A very wise man once told me (actually, he's just my former boss, but still an AMAZING programmer) that there is such a thing as "good enough". He told me that in previous jobs, there were programmers that spent hours or days figuring out the best way to do something, when a "good enough" solution that took 10% of the time to plan and implement would have virtually the same result for the end user. Remember that at the end of the day, it's end users that are using what you create, and they're not going to care how wonderful your pathfinding algorithm is, all they will care about is, does it work, and does it run at an acceptable speed.

Quote
I'd rather learn to use a C library for mucking about with HTML and CSS than use PHP.  I have never heard a good thing about PHP, except for the dubious, "everyone uses it."  If I see everyone else is doing something, that's reason enough not to do it.

I understand the point you're trying to make, but I can turn around and say virtually everyone uses C++ at AAA game studios. Everyone using something does not mean it's bad. In the case of PHP, it is, as far as I know, the easiest and fastest way to integrate a web front-end with a database. I would encourage you to analyze the merits of each technology you consider on its own and determine that way whether it's worth using or not. Remember that the best tool for the job is the most appropriate tool available to you, and if that means using a technology that everyone uses, so be it.

Quote
If they want a good grade, I do all the work and come up with a plausible story and I feed them their parts of the story for the teacher.

It's hard for me to talk about this without sounding arrogant or like a jerk, so if that's how I come off, I do apologize. That said, I'd like to ask you, as a leader, is doing all the work for people helping that person grow and develop? If they are just there for a good grade, that doesn't necessarily mean they aren't willing to work or learn, and doing the work for them means you will never find out. You may be surprised by how good some people are, but I think it's important to give them a chance to show that. If they are dragging the project down because of a lack of work ethic, I would inform the supervisor and let them fail - that will be a good life lesson for them.

Again, if I sounded like a jerk with that, I do apologize.

Quote
Italicized Portion: What should I do when I come up with an idea that I think can make the company more money?  I don't think it's ever a good idea to tell my bosses about exciting new ways to lay off half their workforce (especially me), so my guess is that I should file that idea away for later and find a way to automate it.  From there I can use it to do my work for me, freeing up time for my own business or I can start another business on the side and compete with my employer until I'm caught or they buy me out.

If you're THAT good, then I think you're probably good enough to start your own business and put everyone else out of business. :) When companies compete like that for a better quality product, the end user wins. That said, I wouldn't try to screw over an employer unless you're prepared to pay the hefty lawyer fees to deal with the lawsuit if they find out what you've been doing. This is not me advocating such practices, just to be clear!! :D

Quote
Underlined Portion: How to do things with people?

I think the idea was that a lesson you may learn from other people may simply be, how to better deal with people.

Quote
Underlined: Is it better for everyone to work on everything, for everyone to specialize in their one thing, or somewhere in between?  Bear in mind that I'm very familiar with SaGa Frontier and I have seen what happens when programmers don't communicate.  I can go into greater detail if you want.

I was a team lead on a project a couple of times, once with like 3 other programmers, and my best advice here is to determine what the strengths are of your team members and assign them a position that will put them in the best position to succeed. I don't mean that in the sense of putting that person in the best position for them to succeed to inflate their ego, but to put them in the best position to reach end of project successfully. If everyone succeeds, the team wins. You win or lose as a team.

That's about all I have. Good luck with your career and I hope that you achieve great success in your life! :)