|
Thread Rules 1. This is not a "do my homework for me" thread. If you have specific questions, ask, but don't post an assignment or homework problem and expect an exact solution. 2. No recruiting for your cockamamie projects (you won't replace facebook with 3 dudes you found on the internet and $20) 3. If you can't articulate why a language is bad, don't start slinging shit about it. Just remember that nothing is worse than making CSS IE6 compatible. 4. Use [code] tags to format code blocks. |
On November 22 2013 10:47 sluggaslamoo wrote:Show nested quote +On November 22 2013 08:39 3FFA wrote:On November 22 2013 08:21 sluggaslamoo wrote:On November 21 2013 08:09 3FFA wrote:(I just started learning about them so I feel like playing with it and making a small text adventure game, the array is an array of the rooms) As I said here, this is for a set of 20 rooms to be navigated in. It gets really complicated to navigate more than one or two players/creatures through a ton of numbers that are listed but don't really make much sense. The reason I have 3 columns is because there are 3 routes to other rooms for each room on the map. I'll make sure I take 21 out of a loop and make it have its own separate assignment statement, thank you for pointing that out. From a design standpoint a 3D array is not really the right way to go about it. It would be better to have a single array of rooms, and each room has 4 variables, north/south/east/west which link to other rooms. ("3 routes to other rooms" suggest that there are 4 rooms connected for each room, including the one you came from) Also look at your program in terms of roles and responsibilities and the kind of components you want in your program, don't think about the implementation first. For example. - It has a number of rooms = This tells me that a 1D Array of rooms is sufficient - A room can connect to multiple rooms = Each room either needs an array of more rooms or N/S/E/W, in your case 4, NSEW should be sufficient and less complicated. - Each room contains XYZ = A room needs to be a data-structure Depends what you are trying to do though, if you are trying to learn multi-dimensional arrays there's much better problem domains in which multidimensional arrays are useful for. Such as a 2D array for a graphical tile-game, or matrix manipulation for 3D programming. There's really no point in learning strange ways of implementing things because you're not really learning how to program. You learn to program by learning how to solve real problems in the best way possible. If you wanna learn how to use certain features of programming, you are better off finding a problem domain where the method you are using is appropriate, that way when you visit the same problem, you know exactly the best way of doing it. I'm using a 2D Array, not a 3D Array. o.O And I'm sorry, I meant that each room has 3 routes to rooms other than the current room. So NEW or SEW for each room. The way I'm doing the 2D Array is that the 1st column is E 2nd column is W and 3rd column is N or S depending on the room the player is in. Then the player inputs whether he wants to go N/S E or W... Man I nearly finished writing my reply and then my computer crashed T_T, time to write it all again. Anyway I looked at your original post again and I think I get it now. There is an initial array of 21 rooms, and each element has another array of 3 elements, which contain the index of the rooms in the original array. Anyway I've found that telling people that their method is wrong never gets us anywhere so lets do it your way, then we'll design the program in a way that gives it enough flexibility that you can change it later if you want to. Because you are using C, we'll use a mixture of object pool and factory patterns which makes life easier when using C. Also just because we are using C doesn't mean we can't take anything from OOP. So initially we will need a Room Manager which is responsible for managing all your rooms and handling room instantiation. Your Room Manager will need - object pool [base array] - number_of_rooms [variable] - initialize_rooms - clean_up function [for use at the end of the program] - create_room [factory function] - has_room_available [true/false] - retrieve_room So first of all create those functions with no implementation, and your base array. We don't need to use ADTs (classes for C), this can just be a separate file, or hell just separate it with comment lines for now. ####### Room Manager ###### function XYZ () etc etc ###########################
In your mind its important that you see these functions as belonging to a separate entity even if in reality they are global and don't belong to anything, it will make life easier in the long run. Create your base array (object pool) globally (yes global variables are poisonous in a vacuum but lets not go down that path for now). Its not a real object pool (it contains arrays not objects) but we can treat it like one because it can be later. In your initialize_rooms function this will create the pool. It should take a number_of_rooms argument which determines the size of the pool (base_array). Implement this first and test that it works (on its own), once it works move on. In your clean_up function create an implementation that deallocates the array. This will eventually go at the end of your program. In your has_room_available function, it will tell you if there are any empty rooms left in the pool. Basically you need to check if number_of_rooms doesn't exceed the number of rooms in the array, returning true or false. Test to make sure this works (on its own), then move on. In your create_room function, it will take room1_number, room2_number, room3_number. Use your has_room_available() function to determine if you can create more rooms, if not, throw an error. It will then create an array in the next element in pool with 3 elements (using the arguments provided) using the number_of_rooms variable. When the array is created, the function returns the index of the room in the pool that was just created. Test to make sure this works (on its own), then move on. In your retrieve_room function, you will just take a room_number argument. This will return the array from the pool, given the appropriate room index. This will also allow you to use a 1 based instead of 0 based numbering system, if you wanted to. Test to make sure this works, then move on. Ok if you have unit tested your Room Manager (even just manually using traces), then you should be able to put the pieces the puzzle together without much problem knowing that each function on its own won't be causing errors allowing you to home in on any bugs much faster. *************** Rooms done! Now for the Player. We do the same thing, without using datastructures we create some variables for the player. Create another "component" for the Player like we did with the Room Manager. Player - player_position variable = Room number he is in - move_to(room_number) = self explanatory - current_room() = actually retrieves the room he is in using the retrieve_room function See if you can implement those, remember to test each function separately. This is also where you can output your text adventure logging. "You enter room XYZ which room do you want to go now?" ************** Player done! The last component for our minimum viable product will be the controller. Much like a gamepad, the controller is the interface responsible for handling all the input. wait_for_input() will pause the terminal to wait for input using your terminal read function and return the appropriate data for which other components will use. ************* The last bit comes with actually implementing the program. These components should be able to give you the tools to easily create a working program and in a very clean manner too. The program should look something like initialize_rooms(21) starting_room = create_room(1,2,3) create_room(starting_room,3,4) move_to(starting_room)
while running wait_for_input()
clean_up()
************* Now you may ask why you can't just throw everything in the main function and try and get it to work? Doing it this way gives you direction and prevents you from getting lost, even if you are writing more code, what takes time is not writing the code, its understanding the implementation. If you can write 75 words per minute, chances are the time spent figuring out what to do is going to be the biggest bottleneck in your program implementation time. So next time instead of rushing into the implementation take a step back and have a think about what are the tools you need to make it work. At first it will take a long time to do it this way, but eventually in the long run it will be much more efficient, I didn't stop to think one time during this whole post, I just wrote everything off the top of my head. There could be stuff missing, but it should be enough for you to fill in the gaps. Because this implementation is flexible, if you ever decide to, you can have your Room Manager return data structures instead of arrays if you ever want a more complex program, without much effort.
Why are you trying to re-invent the wheel? Get yourself some MUDlib and driver (they're usually free) and you can create entire worlds. Each room there is a separate object (class) and you have all the basic handling and interaction built-in.
http://en.wikipedia.org/wiki/Mudlib
Even if you don't make it this way, you can at least take a look at the code involved there and get some good ideas on how to handle such things. It's way easier than using some huge arrays since each room is a separate class you can easily add, remove and move stuff around.
Some tutorials: http://discworld.starturtle.net/lpc/creating/lpc_basic/contents.html http://discworld.starturtle.net/external/lpc_for_dummies/index.shtml
Example of a room done in LPC:
/* This is a basic room! Written by Drakkos. 29/09/2000 */
inherit "/std/room";
void setup() { set_short("blobby lair"); set_long("This is where the grey blob lives. All around lie " "frogs, and wombles, and strange oozy things. It's a " "very nice lair, as lairs go.\n"); add_property("determinate", "a "); set_light(50); add_item("frog", "The frogs are very nice. Very froggy."); add_item("womble", "It's Uncle Bulgaria!"); add_item("strange oozy things", "Ewww!");
add_exit("east", "/w/your_name/workroom", "road"); }
void reset() { call_out ("after_reset", 3); }
void after_reset() {
object ob = find_object("/w/your_name/simple_npc");
// if (!ob) will return true if ob is 0... in other words, it // didn't find an object with find_object().
if (!ob) { // There's no object with that filename loaded, so we load it // and then move it into this_object()... which in the case of // this example, is the room we just coded.
ob = load_object("/w/your_name/simple_npc");
// For information on how the move() function works, you // can check out 'help move'. But briefly, the first argument // is where the object is to be moved to... the second is the // message that objects in the destination get when the object // enters. $N will be replaced with the short of the object. // 'appear$s' is a pluralisation code... it will change to // 'appear' when more than one object enters at the same time, // and 'appears' when only one enters.
ob->move(this_object(), "$N appear$s with a wet squelch.");
}
// if (!environment(ob)) will return true if ob returns 0 for // environment... in other words, it's loaded, but located in // null-space.
else if (!environment(ob)) { ob->move (this_object(), "$N appear$s with a wet squelch."); }
}
As a bonus you also get the entire network code and can set it up in 2 minutes time for multiplayer online play.
|
Has anyone here developed for the Oculus Rift? How hard was it to start after you get acquainted with Unity (if thats what you used)? I'm in last year of college and I'm thinking of getting one to tinker a bit, because after i'm done with college I'll probably won't have time for this sort of stuff.
|
On November 23 2013 20:50 berated- wrote:Show nested quote +On November 23 2013 14:56 phar wrote:^ yes, agreed. On November 23 2013 13:11 billy5000 wrote: I'm also curious as well. My school hasn't really taught or given us any big projects that involve working as a team or building software. Is this typical for most CS majors at mediocre CS schools? I've done some web programming on my own and an internship at a web programming shop, but I would like to step into doing something other than web dev at a larger company. Not big as microsoft or google, but just a large company where they invest quite a lot in training their employees. And I've also checked out some interview questions for google, and I feel like I can only do the basic ones.
I'm also literally graduating with 2 years under my belt since I switched majors and had absolutely no programming experience before. That's what led me to think that a decent grad school somewhere else would be worth my investment since in state tuitions are pretty negligible considering I'm in this field. Any thoughts? Not a bad idea, if only because it allows you another summer to get a proper internship at a bigger place. When are you graduating? The applications for places like microsoft, google, etc may have already passed for summer 2014*. You should definitely try to get an internship at a bigger place - the requirements are much lower, but if you do good work while you're there it's much easier to convert to full time. If you feel your undergrad experience was lacking, and you're not spending ungodly amounts of money, it may be worth it. Also bear in mind that most of the interview questions you'll find at a place like microsoft, google, etc don't have much to do with software engineering. It's mostly variations on basic algorithms & data structures questions, lots of whiteboard coding, with maybe a little bit of design (though less so as a new grad). * I dunno what the actual deadlines are, maybe you can apply late too, worth a shot. At least look into it. External information on hard deadlines appears to be... lacking: http://careers.microsoft.com/careers/en/us/tech-software-internships.aspx#tab_sdehttps://www.google.com/about/jobs/search/#!t=jo&jid=3480001& This is something I've always been intrigued by. When most go into compsci I think it's usual to want to work for one of the big guys. However, how many people in this thread actually do so? The more I get into my career, the more happy I am to work for a small company. I get to directly impact the direction of the development, introduce new techs and ideas, and not have to go through layers of red tape to do so. Most of all, I'm considered an important part of the company...that seems like it would be way harder to achieve at a massive company.
I specifically mentioned that it doesn't have to be big as microsoft or google, but it doesn't hurt to aim larger it seems like. But anyway, the reason why I don't want to work at a small company is that they can't afford to invest a lot in training, which I think is significant as my first job into this field. So yeah, I do agree small companies aren't all that bad, but I think starting out in bigger companies has more value.
|
On November 23 2013 05:36 darkness wrote:To the guys doing Software Engineering, have you guys taken a masters degree? I currently can't afford masters if I don't have a gap year to earn some money. But then again, I'm not sure if I'm motivated that there is a good reason to do so. I guess if there's a programming related reward, then I might be more motivated.  You can do it with no degree if you have enough drive and focus, more easily with a BS, and even easier with an MS
It depends entirely on whether or not you like school, if you like it then take the extra couple years. As far as the money goes, you will be able to make more money with a more initially with a more advanced degree. That being said, you will have spent more money on school and earned less money during that time when you could have been working. I have little to no formal education and less than 4 years of experience, however I'm earning more than the recent graduates we've hired.
If you like school, then stay in school, if you like money, then work.
|
On November 24 2013 03:15 billy5000 wrote:Show nested quote +On November 23 2013 20:50 berated- wrote:On November 23 2013 14:56 phar wrote:^ yes, agreed. On November 23 2013 13:11 billy5000 wrote: I'm also curious as well. My school hasn't really taught or given us any big projects that involve working as a team or building software. Is this typical for most CS majors at mediocre CS schools? I've done some web programming on my own and an internship at a web programming shop, but I would like to step into doing something other than web dev at a larger company. Not big as microsoft or google, but just a large company where they invest quite a lot in training their employees. And I've also checked out some interview questions for google, and I feel like I can only do the basic ones.
I'm also literally graduating with 2 years under my belt since I switched majors and had absolutely no programming experience before. That's what led me to think that a decent grad school somewhere else would be worth my investment since in state tuitions are pretty negligible considering I'm in this field. Any thoughts? Not a bad idea, if only because it allows you another summer to get a proper internship at a bigger place. When are you graduating? The applications for places like microsoft, google, etc may have already passed for summer 2014*. You should definitely try to get an internship at a bigger place - the requirements are much lower, but if you do good work while you're there it's much easier to convert to full time. If you feel your undergrad experience was lacking, and you're not spending ungodly amounts of money, it may be worth it. Also bear in mind that most of the interview questions you'll find at a place like microsoft, google, etc don't have much to do with software engineering. It's mostly variations on basic algorithms & data structures questions, lots of whiteboard coding, with maybe a little bit of design (though less so as a new grad). * I dunno what the actual deadlines are, maybe you can apply late too, worth a shot. At least look into it. External information on hard deadlines appears to be... lacking: http://careers.microsoft.com/careers/en/us/tech-software-internships.aspx#tab_sdehttps://www.google.com/about/jobs/search/#!t=jo&jid=3480001& This is something I've always been intrigued by. When most go into compsci I think it's usual to want to work for one of the big guys. However, how many people in this thread actually do so? The more I get into my career, the more happy I am to work for a small company. I get to directly impact the direction of the development, introduce new techs and ideas, and not have to go through layers of red tape to do so. Most of all, I'm considered an important part of the company...that seems like it would be way harder to achieve at a massive company. I specifically mentioned that it doesn't have to be big as microsoft or google, but it doesn't hurt to aim larger it seems like. But anyway, the reason why I don't want to work at a small company is that they can't afford to invest a lot in training, which I think is significant as my first job into this field. So yeah, I do agree small companies aren't all that bad, but I think starting out in bigger companies has more value.
I think starting at a small company is good, it allows you to learn more about the business side of things, and fill multiple roles. This helps you figure out where you want to go when you move to a large company where your role will be narrower. I now work for a fairly large company (200+ employees and growing), and I'm happy staying here for a few years, after that I'll probably take a stab at Valve 
Even as a recent hire I've been able to advocate for, research, and implement a JavaScript unit testing framework that integrates with our CI build server. This is something a-typical for a company of this size, but the structure of the engineering team is completely flat, everyone works directly under the CTO.
|
On November 23 2013 20:50 berated- wrote:Show nested quote +On November 23 2013 14:56 phar wrote:^ yes, agreed. On November 23 2013 13:11 billy5000 wrote: I'm also curious as well. My school hasn't really taught or given us any big projects that involve working as a team or building software. Is this typical for most CS majors at mediocre CS schools? I've done some web programming on my own and an internship at a web programming shop, but I would like to step into doing something other than web dev at a larger company. Not big as microsoft or google, but just a large company where they invest quite a lot in training their employees. And I've also checked out some interview questions for google, and I feel like I can only do the basic ones.
I'm also literally graduating with 2 years under my belt since I switched majors and had absolutely no programming experience before. That's what led me to think that a decent grad school somewhere else would be worth my investment since in state tuitions are pretty negligible considering I'm in this field. Any thoughts? Not a bad idea, if only because it allows you another summer to get a proper internship at a bigger place. When are you graduating? The applications for places like microsoft, google, etc may have already passed for summer 2014*. You should definitely try to get an internship at a bigger place - the requirements are much lower, but if you do good work while you're there it's much easier to convert to full time. If you feel your undergrad experience was lacking, and you're not spending ungodly amounts of money, it may be worth it. Also bear in mind that most of the interview questions you'll find at a place like microsoft, google, etc don't have much to do with software engineering. It's mostly variations on basic algorithms & data structures questions, lots of whiteboard coding, with maybe a little bit of design (though less so as a new grad). * I dunno what the actual deadlines are, maybe you can apply late too, worth a shot. At least look into it. External information on hard deadlines appears to be... lacking: http://careers.microsoft.com/careers/en/us/tech-software-internships.aspx#tab_sdehttps://www.google.com/about/jobs/search/#!t=jo&jid=3480001& This is something I've always been intrigued by. When most go into compsci I think it's usual to want to work for one of the big guys. However, how many people in this thread actually do so? The more I get into my career, the more happy I am to work for a small company. I get to directly impact the direction of the development, introduce new techs and ideas, and not have to go through layers of red tape to do so. Most of all, I'm considered an important part of the company...that seems like it would be way harder to achieve at a massive company. I never really thought about what kind of company I wanted to work for, because it doesn't matter too much to me. I just want to work on projects I'm passionate about.
|
Yea I only mean that the apps for internships at large places are so damn early (starting in like September or some bullshit), you might as well shotgun approach and apply to amazon/facebook/google/microsoft/etc. Can't hurt. If it doesn't pan out, you can re-evaluate whether or not you want to go for a master's.
On November 23 2013 20:50 berated- wrote:Show nested quote +On November 23 2013 14:56 phar wrote:^ yes, agreed. On November 23 2013 13:11 billy5000 wrote: I'm also curious as well. My school hasn't really taught or given us any big projects that involve working as a team or building software. Is this typical for most CS majors at mediocre CS schools? I've done some web programming on my own and an internship at a web programming shop, but I would like to step into doing something other than web dev at a larger company. Not big as microsoft or google, but just a large company where they invest quite a lot in training their employees. And I've also checked out some interview questions for google, and I feel like I can only do the basic ones.
I'm also literally graduating with 2 years under my belt since I switched majors and had absolutely no programming experience before. That's what led me to think that a decent grad school somewhere else would be worth my investment since in state tuitions are pretty negligible considering I'm in this field. Any thoughts? Not a bad idea, if only because it allows you another summer to get a proper internship at a bigger place. When are you graduating? The applications for places like microsoft, google, etc may have already passed for summer 2014*. You should definitely try to get an internship at a bigger place - the requirements are much lower, but if you do good work while you're there it's much easier to convert to full time. If you feel your undergrad experience was lacking, and you're not spending ungodly amounts of money, it may be worth it. Also bear in mind that most of the interview questions you'll find at a place like microsoft, google, etc don't have much to do with software engineering. It's mostly variations on basic algorithms & data structures questions, lots of whiteboard coding, with maybe a little bit of design (though less so as a new grad). * I dunno what the actual deadlines are, maybe you can apply late too, worth a shot. At least look into it. External information on hard deadlines appears to be... lacking: http://careers.microsoft.com/careers/en/us/tech-software-internships.aspx#tab_sdehttps://www.google.com/about/jobs/search/#!t=jo&jid=3480001& This is something I've always been intrigued by. When most go into compsci I think it's usual to want to work for one of the big guys. However, how many people in this thread actually do so? The more I get into my career, the more happy I am to work for a small company. I get to directly impact the direction of the development, introduce new techs and ideas, and not have to go through layers of red tape to do so. Most of all, I'm considered an important part of the company...that seems like it would be way harder to achieve at a massive company. I don't know if most people want to work for one of the big guys. I dunno how many people in this thread do, but we have at least 2 googlers in here, and I think one from microsoft. Also bear in mind that "the big guys" employ a shitton of people. And it depends on what you consider "big." If >1k/2k engineers is still not big, then maybe it's just a difference of terminology
Depending on the big company, your experience will be varied, of course. At some big companies, picking out new techs and having a hand in the direction of the projects you're working on is a definite possibility. Red tape will vary from lots of pointless crap, to mostly limited around things that are actually necessary for productionization.
Sure, if you value being the go-to guy for everything in your company, that's gonna be hard at a large company unless you're a Jeff Dean level of genius. But it's surprisingly not that difficult to carve out areas and become a local expert on certain things. The other advantage about a large place is that you have way more opportunities to learn. Being surrounded by a large number of really smart co-workers is a good way to get pulled up quickly.
Also if your goal really is a lot of money, and you think that with a master's degree and additional internship you could make it out west, that might be the best bet if you're coming from an undergrad program that typically won't hire into ms/google/facebook/etc. The piles of cash are staggeringly large, if that's your motivation. May not the be the best reason to get into software.
|
On November 24 2013 03:15 billy5000 wrote:Show nested quote +On November 23 2013 20:50 berated- wrote:On November 23 2013 14:56 phar wrote:^ yes, agreed. On November 23 2013 13:11 billy5000 wrote: I'm also curious as well. My school hasn't really taught or given us any big projects that involve working as a team or building software. Is this typical for most CS majors at mediocre CS schools? I've done some web programming on my own and an internship at a web programming shop, but I would like to step into doing something other than web dev at a larger company. Not big as microsoft or google, but just a large company where they invest quite a lot in training their employees. And I've also checked out some interview questions for google, and I feel like I can only do the basic ones.
I'm also literally graduating with 2 years under my belt since I switched majors and had absolutely no programming experience before. That's what led me to think that a decent grad school somewhere else would be worth my investment since in state tuitions are pretty negligible considering I'm in this field. Any thoughts? Not a bad idea, if only because it allows you another summer to get a proper internship at a bigger place. When are you graduating? The applications for places like microsoft, google, etc may have already passed for summer 2014*. You should definitely try to get an internship at a bigger place - the requirements are much lower, but if you do good work while you're there it's much easier to convert to full time. If you feel your undergrad experience was lacking, and you're not spending ungodly amounts of money, it may be worth it. Also bear in mind that most of the interview questions you'll find at a place like microsoft, google, etc don't have much to do with software engineering. It's mostly variations on basic algorithms & data structures questions, lots of whiteboard coding, with maybe a little bit of design (though less so as a new grad). * I dunno what the actual deadlines are, maybe you can apply late too, worth a shot. At least look into it. External information on hard deadlines appears to be... lacking: http://careers.microsoft.com/careers/en/us/tech-software-internships.aspx#tab_sdehttps://www.google.com/about/jobs/search/#!t=jo&jid=3480001& This is something I've always been intrigued by. When most go into compsci I think it's usual to want to work for one of the big guys. However, how many people in this thread actually do so? The more I get into my career, the more happy I am to work for a small company. I get to directly impact the direction of the development, introduce new techs and ideas, and not have to go through layers of red tape to do so. Most of all, I'm considered an important part of the company...that seems like it would be way harder to achieve at a massive company. I specifically mentioned that it doesn't have to be big as microsoft or google, but it doesn't hurt to aim larger it seems like. But anyway, the reason why I don't want to work at a small company is that they can't afford to invest a lot in training, which I think is significant as my first job into this field. So yeah, I do agree small companies aren't all that bad, but I think starting out in bigger companies has more value.
I just started work at a large tech company (size/scale of Microsoft or Google), so I have a few thoughts on the subject. First, I don't think my employer has directly spent any money on my training. That being said, there are dozens of technical talks every week by senior engineers, but most of them don't really apply to things I'm working on or interested in. What is far more important for learning is the day-to-day mentoring you receive from the other people on your team. This is hugely dependent on the internal culture at the company where you work, and is something you should try to determine when you're interviewing. (Almost every interviewer will ask you if you have any questions for them once they've finished grilling you, that would be a good time to ask about training and mentoring.)
The more I get into my career, the more happy I am to work for a small company. I get to directly impact the direction of the development, introduce new techs and ideas, and not have to go through layers of red tape to do so. Most of all, I'm considered an important part of the company...that seems like it would be way harder to achieve at a massive company.
This is a great point, and I think it's the major thing to keep in mind when choosing between a small and a large company. Even though I work at a place where teams are famously independent and can pretty much do whatever they want (in terms of tools, technology, design decisions, etc.), I still don't get to use a lot of my favorite tools for historical reasons. (I spent most of college writing LISP, now I write mostly enterprise Java, a fact that makes me extremely sad.) My team has been around for 10 years, so there's a ton of momentum behind our processes. As a junior engineer, I simply don't have the ability in practice to change our processes, even though there's nothing in principle stopping me.
On the other hand, working at a large company does have its advantages. First, I don't have to think about a lot of the annoying little things that are important but annoying. For example, I don't have to think about deploying software, provisioning new hosts, or dealing with load balancing. Those things are important, but, at the end of the day, I don't want to have to deal with them personally. Second, I get to work at a scale that it's difficult to find at a small company. Working at such a large scale is a fun challenge, and it forces me to be a better programmer. (Things that are acceptable if you only do them 1000 times suddenly become huge problems when repeated 100 million times.) Finally, there are a lot of opportunities at a large company, so if I ever get bored of my current position, I can switch to something new and different without having to go through the job search process. (Again, this might be company-specific, other places may not allow so much mobility.)
As a final note, I don't think most places have not stopped hiring for 2014 internships. Google's deadline is coming up, but I found multiple internships much later in the year (both at large and small companies). Apply ASAP, but spots are definitely open. I have my current job because of an internship I applied for in March.
|
On November 24 2013 03:15 billy5000 wrote:Show nested quote +On November 23 2013 20:50 berated- wrote:On November 23 2013 14:56 phar wrote:^ yes, agreed. On November 23 2013 13:11 billy5000 wrote: I'm also curious as well. My school hasn't really taught or given us any big projects that involve working as a team or building software. Is this typical for most CS majors at mediocre CS schools? I've done some web programming on my own and an internship at a web programming shop, but I would like to step into doing something other than web dev at a larger company. Not big as microsoft or google, but just a large company where they invest quite a lot in training their employees. And I've also checked out some interview questions for google, and I feel like I can only do the basic ones.
I'm also literally graduating with 2 years under my belt since I switched majors and had absolutely no programming experience before. That's what led me to think that a decent grad school somewhere else would be worth my investment since in state tuitions are pretty negligible considering I'm in this field. Any thoughts? Not a bad idea, if only because it allows you another summer to get a proper internship at a bigger place. When are you graduating? The applications for places like microsoft, google, etc may have already passed for summer 2014*. You should definitely try to get an internship at a bigger place - the requirements are much lower, but if you do good work while you're there it's much easier to convert to full time. If you feel your undergrad experience was lacking, and you're not spending ungodly amounts of money, it may be worth it. Also bear in mind that most of the interview questions you'll find at a place like microsoft, google, etc don't have much to do with software engineering. It's mostly variations on basic algorithms & data structures questions, lots of whiteboard coding, with maybe a little bit of design (though less so as a new grad). * I dunno what the actual deadlines are, maybe you can apply late too, worth a shot. At least look into it. External information on hard deadlines appears to be... lacking: http://careers.microsoft.com/careers/en/us/tech-software-internships.aspx#tab_sdehttps://www.google.com/about/jobs/search/#!t=jo&jid=3480001& This is something I've always been intrigued by. When most go into compsci I think it's usual to want to work for one of the big guys. However, how many people in this thread actually do so? The more I get into my career, the more happy I am to work for a small company. I get to directly impact the direction of the development, introduce new techs and ideas, and not have to go through layers of red tape to do so. Most of all, I'm considered an important part of the company...that seems like it would be way harder to achieve at a massive company. I specifically mentioned that it doesn't have to be big as microsoft or google, but it doesn't hurt to aim larger it seems like. But anyway, the reason why I don't want to work at a small company is that they can't afford to invest a lot in training, which I think is significant as my first job into this field. So yeah, I do agree small companies aren't all that bad, but I think starting out in bigger companies has more value.
I wasn't saying that you wanted to work there, was more targeted on phar's comments. However, I do think that whether a big or small company works better for training probably varies by the individual. I know for me personally, working at a smaller company gave me a lot of hands on training and close contact to our more talented people. I was able to grow at a much faster rate as compared to some of the people I left college at the same time as.
I do agree with phar's comments about the bigger the company the more people are there to pull you up. That's the thing I struggle the most with now. I made a lot of great progress and growth in the first couple years...and now there is no one ahead of me. All of my learning now is self directed and teaching others, which I sometimes feel is not a good thing only 5 years into my career.
Thanks for the feedback everyone, was just curious on people's perspectives.
|
I'm not sure if this is the right thread for my question, sorry if I'm wrong here. While learning HTML, PHP, CSS, etc. is it better to use something like XAMPP (local server), or is it better to rent a "real" server, which is hosted somewhere else?
|
On November 24 2013 04:26 phar wrote:Sure, if you value being the go-to guy for everything in your company, that's gonna be hard at a large company unless you're a Jeff Dean level of genius. But it's surprisingly not that difficult to carve out areas and become a local expert on certain things. The other advantage about a large place is that you have way more opportunities to learn. Being surrounded by a large number of really smart co-workers is a good way to get pulled up quickly.
Those Jeff Dean jokes are absolutely fucking gold rofl.
'Compilers don't warn Jeff Dean. Jeff Dean warns compilers.' 'gcc-04 emails your code to Jeff Dean for a rewrite.' 'The speed of light in a vacuum used to be about 35 mph. Then Jeff Dean spent a weekend optimizing physics.' 'When Graham Bell invented the telephone, he saw a missed call from Jeff Dean.' 'Jeff Dean wrote an O(n^2) algorithm once. It was for the Traveling Salesman problem.'
e: also good is Jeff Dean's calculator =D
|
On November 24 2013 05:18 ExChill wrote: I'm not sure if this is the right thread for my question, sorry if I'm wrong here. While learning HTML, PHP, CSS, etc. is it better to use something like XAMPP (local server), or is it better to rent a "real" server, which is hosted somewhere else?
It depends. A XAMPP Server is really enough for learning. If you want to learn all the surrounding stuff, e.g. having remote git repositories that you share with others, administrating apache through ssh and installing different websites, managing a live & dev environment simultaneously, etc., then a cheap vserver with root access can be nice to have. There are lots of vhost providers that offer servers for less than 10 bucks a month and which are easily enough for those needs, though if you don't care about that stuff, it's perfectly fine to do everything locally.
Personally, i like having a real server since i can use it for whatever i like and could install vservers to simulate software that is distributed across servers, e.g. with seperate database servers and such, which i don't actually do, so it's really just expensive overkill that i, and definitely also you, don't actually need.
|
On November 24 2013 04:26 Millitron wrote:Show nested quote +On November 23 2013 20:50 berated- wrote:On November 23 2013 14:56 phar wrote:^ yes, agreed. On November 23 2013 13:11 billy5000 wrote: I'm also curious as well. My school hasn't really taught or given us any big projects that involve working as a team or building software. Is this typical for most CS majors at mediocre CS schools? I've done some web programming on my own and an internship at a web programming shop, but I would like to step into doing something other than web dev at a larger company. Not big as microsoft or google, but just a large company where they invest quite a lot in training their employees. And I've also checked out some interview questions for google, and I feel like I can only do the basic ones.
I'm also literally graduating with 2 years under my belt since I switched majors and had absolutely no programming experience before. That's what led me to think that a decent grad school somewhere else would be worth my investment since in state tuitions are pretty negligible considering I'm in this field. Any thoughts? Not a bad idea, if only because it allows you another summer to get a proper internship at a bigger place. When are you graduating? The applications for places like microsoft, google, etc may have already passed for summer 2014*. You should definitely try to get an internship at a bigger place - the requirements are much lower, but if you do good work while you're there it's much easier to convert to full time. If you feel your undergrad experience was lacking, and you're not spending ungodly amounts of money, it may be worth it. Also bear in mind that most of the interview questions you'll find at a place like microsoft, google, etc don't have much to do with software engineering. It's mostly variations on basic algorithms & data structures questions, lots of whiteboard coding, with maybe a little bit of design (though less so as a new grad). * I dunno what the actual deadlines are, maybe you can apply late too, worth a shot. At least look into it. External information on hard deadlines appears to be... lacking: http://careers.microsoft.com/careers/en/us/tech-software-internships.aspx#tab_sdehttps://www.google.com/about/jobs/search/#!t=jo&jid=3480001& This is something I've always been intrigued by. When most go into compsci I think it's usual to want to work for one of the big guys. However, how many people in this thread actually do so? The more I get into my career, the more happy I am to work for a small company. I get to directly impact the direction of the development, introduce new techs and ideas, and not have to go through layers of red tape to do so. Most of all, I'm considered an important part of the company...that seems like it would be way harder to achieve at a massive company. I never really thought about what kind of company I wanted to work for, because it doesn't matter too much to me. I just want to work on projects I'm passionate about. This is the best way to do it. Actually perhaps even better would be to not be picky about the project, but the technical challenges & learning opportunities from the specific problems you solve. If you can be happy just solving cool problems, you'll have an easier time being happier.
On November 24 2013 05:09 Hobbesander wrote: As a final note, I don't think most places have not stopped hiring for 2014 internships. Google's deadline is coming up, but I found multiple internships much later in the year (both at large and small companies). Apply ASAP, but spots are definitely open. I have my current job because of an internship I applied for in March. Yea I wasn't sure. They must do it on a rolling basis. I've already been interviewing interns for placement, meaning they did their tech interviews in like October (wtfff?). I had to have intern projects for next summer picked out in September (because I totally know what I'm gonna be working on in 9 months, right? lol no).
|
1.Enumerate all empty cells in typewriter order (left to right, top to bottom)
2.Our “current cell” is the first cell in the enumeration.
3.Enter a 1 into the current cell. If this violates the Sudoku condition, try entering a 2, then a 3, and so forth, until a. the entry does not violate the Sudoku condition, or until b. you have reached 9 and still violate the Sudoku condition.
4.In case a: if the current cell was the last enumerated one, then the puzzle is solved. If not, then go back to step 2 with the “current cell” being the next cell. In case b: if the current cell is the first cell in the enumeration, then the Sudoku puzzle does not have a solution. If not, then erase the 9 from the corrent cell, call the previous cell in the enumeration the new “current cell”, and continue with step 3.
Is this the brute-force algorithm for sudoku? I initially plan to use it but I think it may overwrite the default values provided with a puzzle.
E.g. one of values:
![[image loading]](http://www.logicgamesonline.com/images/sudoku-puzzle-256.png)
Or does that never happen?
Edit: Nevermind, it says to enumerate only empty cells.
|
On November 24 2013 06:39 darkness wrote: 1.Enumerate all empty cells in typewriter order (left to right, top to bottom)
2.Our “current cell” is the first cell in the enumeration.
Isn't this like the most basic thing for a 2D array?
int currentRow = QueryCurrentRow(); int currentColumn = QueryCurrentColumn(); int maxRows = QueryRows(); int maxColumns = QueryColumns();
for (int x = currentRow; x < maxRows; x += 1) { for (int y = currentColumn; y < maxColumns; y += 1) { if (cellEmpty) { DoStuff(); } } }
With this, you can even solve Sudoku's that aren't 1-9 (they don't even have to be square).
Edit: With the if (cellEmpty) statement you can practically skip the currentRow/Column variables and just start at 0 every time.
|
Cygwin has bugged out, so I downloaded gVim Easy to use that instead. But it starts in insert mode, and esc doesn't make you go into command mode. How do I get to command mode?
|
On November 24 2013 09:13 Arnstein wrote: Cygwin has bugged out, so I downloaded gVim Easy to use that instead. But it starts in insert mode, and esc doesn't make you go into command mode. How do I get to command mode?
AFAIK gvim easy comes from the standard windows gvim distribution which includes a raw gvim shortcut. Just use that instead or install the standard gvim distribution from vim.org if that isn't the case.
Alternatively, it seems like ctrl-L is the short to go into command mode: http://superuser.com/questions/353776/executing-commands-in-gvim-easy
|
On November 23 2013 14:35 Millitron wrote:Show nested quote +On November 23 2013 13:11 billy5000 wrote: I'm also curious as well. My school hasn't really taught or given us any big projects that involve working as a team or building software. Is this typical for most CS majors at mediocre CS schools? I've done some web programming on my own and an internship at a web programming shop, but I would like to step into doing something other than web dev at a larger company. Not big as microsoft or google, but just a large company where they invest quite a lot in training their employees. And I've also checked out some interview questions for google, and I feel like I can only do the basic ones.
I'm also literally graduating with 2 years under my belt since I switched majors and had absolutely no programming experience before. That's what led me to think that a decent grad school somewhere else would be worth my investment since in state tuitions are pretty negligible considering I'm in this field. Any thoughts? Your curriculum should have something called Software Engineering, or something similar. The class should include a big project where you work with others. May or may not do any actual coding in it, it could be just drawing up design documents and such. Was going to say the same thing. My university definitely has that and most of the other universities I have checked out have it too. I am planning on taking it next year no matter how much I will hate it because I know all of the companies here do a lot of team stuff so having that class will be important (also, not a ton of people seem to take it since it isn't mandatory but it seems like it would be so important). The prof who teaches it is teaching me in a different class right now and he is really good so that makes me a lot less apprehensive about taking the course. I could have technically taken it next term but I want another year of programming on my own under my belt before I start working with others so I don't cause issues, though from what I can tell, I am ahead of many of the other students in my year (Let's just say I'm not shocked that half the people this year will drop out by the end. Some of the mistakes and questions I see are kinda embarrassingly bad. Like people asking how to use ssh when we were supposed to use it all term for doing certain things in my one class or other people seeming like they need their hand held for absolutely everything. You'd think if someone was in Comp Sci they would have a certain degree of proficiency on a computer but apparently that isn't the case).
I'm in the same situation in that I switched majors to comp sci from math but because of how the class scheduling is set up it will take me 3 years to finish. I am fine with that though, I'd rather take things a little slower and learn everything more in depth than try and cram everything in and just squeeze by and not learn much because I have to rush everything. That's not to say next term won't be hell with 5 comp sci classes.
|
On November 24 2013 11:04 Ben... wrote:Show nested quote +On November 23 2013 14:35 Millitron wrote:On November 23 2013 13:11 billy5000 wrote: I'm also curious as well. My school hasn't really taught or given us any big projects that involve working as a team or building software. Is this typical for most CS majors at mediocre CS schools? I've done some web programming on my own and an internship at a web programming shop, but I would like to step into doing something other than web dev at a larger company. Not big as microsoft or google, but just a large company where they invest quite a lot in training their employees. And I've also checked out some interview questions for google, and I feel like I can only do the basic ones.
I'm also literally graduating with 2 years under my belt since I switched majors and had absolutely no programming experience before. That's what led me to think that a decent grad school somewhere else would be worth my investment since in state tuitions are pretty negligible considering I'm in this field. Any thoughts? Your curriculum should have something called Software Engineering, or something similar. The class should include a big project where you work with others. May or may not do any actual coding in it, it could be just drawing up design documents and such. Was going to say the same thing. My university definitely has that and most of the other universities I have checked out have it too. I am planning on taking it next year no matter how much I will hate it because I know all of the companies here do a lot of team stuff so having that class will be important (also, not a ton of people seem to take it since it isn't mandatory but it seems like it would be so important). The prof who teaches it is teaching me in a different class right now and he is really good so that makes me a lot less apprehensive about taking the course. I could have technically taken it next term but I want another year of programming on my own under my belt before I start working with others so I don't cause issues, though from what I can tell, I am ahead of many of the other students in my year (Let's just say I'm not shocked that half the people this year will drop out by the end. Some of the mistakes and questions I see are kinda embarrassingly bad. Like people asking how to use ssh when we were supposed to use it all term for doing certain things in my one class or other people seeming like they need their hand held for absolutely everything. You'd think if someone was in Comp Sci they would have a certain degree of proficiency on a computer but apparently that isn't the case). I'm in the same situation in that I switched majors to comp sci from math but because of how the class scheduling is set up it will take me 3 years to finish. I am fine with that though, I'd rather take things a little slower and learn everything more in depth than try and cram everything in and just squeeze by and not learn much because I have to rush everything. That's not to say next term won't be hell with 5 comp sci classes. You probably shouldn't worry about your programming experience as far as your Software Engineering course goes. It's mostly about planning and teamwork, not so much actual programming. For instance, in my SE course, I wrote maybe 30 lines of pseudo-code total, and no real code. And that wasn't even mandatory. It just so happened that the project my group had picked involved some pretty complicated algorithms, and we felt one of them could best be explained in pseudo-code instead of prose or a flow-chart.
I dreaded the course until I actually had to take it. I loved my programming classes, and didn't really have any interest in something that seemed more oriented towards a business major than a CS major. But once I started the course, it wasn't so bad. It was acceptably interesting, and an easy A.
I'm pretty jealous that you have 5 CS classes. Most I got to take at once was 3.
|
On November 23 2013 07:19 3FFA wrote:Hehe thanks for the effort slug but you apparently need to re-read this part again. I used C + Obj.C last year, this year I'm using Java, although the process I'm using is about the same as the one you outlined, so no worries. I just haven't learned data structures yet, although I believe that next year we will learn about them and my teacher will have us change this lab accordingly.
HURRRRRRR, sorry I kept seeing C++ questions and just naturally assumed. Just use the same process except instead of using "components" use actual objects, it shouldn't be that hard to transform.
The data-structure I mentioned is just a simple C struct, however if you are actually learning data-structures it will probably be a lot more complicated than that, lots of learning about sorting and big-O and things like that.
|
|
|
|
|
|