Register a SA Forums Account here!
JOINING THE SA FORUMS WILL REMOVE THIS BIG AD, THE ANNOYING UNDERLINED ADS, AND STUPID INTERSTITIAL ADS!!!

You can: log in, read the tech support FAQ, or request your lost password. This dumb message (and those ads) will appear on every screen until you register! Get rid of this crap by registering your own SA Forums Account and joining roughly 150,000 Goons, for the one-time price of $9.95! We charge money because it costs us money per month for bills, and since we don't believe in showing ads to our users, we try to make the money back through forum registrations.
 
  • Post
  • Reply
Safe and Secure!
Jun 14, 2008

OFFICIAL SA THREAD RUINER
SPRING 2013

kloa posted:

I'm working on a ASP.NET project with a coworker and we do not have kind of source control (IT hella slow with the softwares), and it's a huge pain.

It sounds like your coworker wouldn't be using source control even if it had been taught in school. I'm guessing they're not exactly an algorithms wiz, right?

Adbot
ADBOT LOVES YOU

ExcessBLarg!
Sep 1, 2001

Skandranon posted:

Computer Science doesn't even really need computers.
So I appreciate that viewpoint, but it's simply not realistic.

Say, somehow you go through school learning nothing but computational theory, what do you do next? You're probably not going into industry, but you could go into academia and research. But even in research you're still going to have to write programs to prototype, or prove, or evaluate your hypotheses. And you're probably going to work on research projects in collaboration with others. So you'll still need to be versed in basic programming tools like shells, editors, build systems, revision control systems, etc.

Hell, even if the only thing you actually need a computer for, is to typeset a paper (and since everyone in CS research uses LaTeX), you're still going to need to learn how to use an editor and probably make. If you ever work on a paper with one or more coauthors, you're probably going to use (and are best off using) revision control too.

This is seriously fundamental stuff in our discipline.

ExcessBLarg! fucked around with this message at 04:39 on May 19, 2015

shodanjr_gr
Nov 20, 2007

Safe and Secure! posted:

All we got about tools at my school was "tools exist for this. find one and RTFM or just use nano and javac for everything" and we turned out fine. We'd have been much worse off if we hadn't been taught to read documentation.

What is there to teach about version control? It's basically three sentences: "This command saves. This command loads. This command shares." I'm serious - when you think of the ideal version control system lecture, what do you imagine the teacher saying and how much time do you imagine them taking to say it?

I'm with you on this. I was not taught any S.E. skills at any point in my academic career either but rather picked it up "on the job" or during my internships.

However, my experience with TAing undergraduates at a major US university has been that the vast majority of them are extremely passive and unmotivated and if you want them to do ANYTHING, you have to actually teach them (I could use more colorful language in describing the joys of my TA experience but that would be a digression. It includes gems such as "How do I install Visual Studio?" and "How do I install the source code?" - which was given to them in a compressed archive).

ExcessBLarg!
Sep 1, 2001

Safe and Secure! posted:

I'm serious - when you think of the ideal version control system lecture, what do you imagine the teacher saying and how much time do you imagine them taking to say it?
In addition to "save, load, and share" it would minimally include a discussion on branching, merging, and how to resolve merge conflicts. I would also include what constitutes a useful commit message, and maybe mention what it means to ignore files and why it's done.

ExcessBLarg! fucked around with this message at 04:41 on May 19, 2015

Stoph
Mar 19, 2006

Give a hug - save a life.
I have worked with a lot of people who poo poo themselves when asked to start contributing via pull requests and not just randomly committing to master and subsequently mashing git pull/git push until they forced their hosed up version as the new remote HEAD.

Safe and Secure!
Jun 14, 2008

OFFICIAL SA THREAD RUINER
SPRING 2013

ExcessBLarg! posted:

Minimally it would include a discussion on branching, merging, and how to resolve merge conflicts. I would also include what constitutes a useful commit message, and maybe mention what it means to ignore files and why it's done.

It sounds to me like you're talking about git in particular, like you don't wish people were taught about version control in school so much as you wish people were taught about git in school. Git puts a really huge emphasis on some of those, but that doesn't make them important to using a version control system. Unless you're using git. Which is a flaw in git, I think, which leads to students being taught to use really flawed tools just because those tools are popular in industry.

Safe and Secure! fucked around with this message at 04:56 on May 19, 2015

Linear Zoetrope
Nov 28, 2011

A hero must cook
I don't think "learning git" really needs any great fanfare, it's pretty minor. The reason I'm advocating it at my school is mostly because we have a hosed up submission system and git has a double bonus of getting people used to it, but mostly just because it can standardize things without having to roll too much new internal software. (Plus as a TA then I can grade on multiple computers without having to resort to things like sftp-ing the entire turnin directory into my dropbox folder, which immediately goes out of sync the second there's a late submission. It also gives graders diffs so they know what they had to change to get a submission to work correctly)

Linear Zoetrope fucked around with this message at 04:58 on May 19, 2015

sarehu
Apr 20, 2007

(call/cc call/cc)
Also, TA's and college professors are completely unqualified to do any real teaching of software engineering practices.

The real gap of software engineering knowledge in programmers today isn't that of being on a team, using version control, communicating with coworkers, and the like. It's in the actual code -- how to write good software. How to make an API that's difficult to gently caress up, how to make one that's practical to update in the future, how to take advantage of a type system, exactly what is it about global variables that will gently caress you up, how to minimize the risks of mutable state, how to design your datatypes so that they're aren't a big nest of pointers, good opinions regarding "be liberal in what you accept," that sort of thing. I mean, everybody who's fresh out of college is going to be terrible at communicating with coworkers, customers, and such, but I think people generally pick that stuff up (anyway, it's not like you can teach it in a class). It's architecture scale things like, don't don't GOD DAMMIT YOU NOOB-rear end FRESHER DO NOT PUT THAT VARIABLE IN THAT CLASS! WHAT IS ITS LIFETIME??? DO YOU KNOW????

That is the worst thing about coworkers.

But there's no reason some class shouldn't just say "push your code to this git thing" or something though. Like how one or two math classes I had were just like, "You must use LaTeX -- figure it out." I mean, that should happen. But they shouldn't be wasting time on that in CS 1 or CS 2 or Data Structures & Algorithms. If people don't know about version control they can make backup copies of directories... that's a basic computer skill.

sarehu fucked around with this message at 04:57 on May 19, 2015

Safe and Secure!
Jun 14, 2008

OFFICIAL SA THREAD RUINER
SPRING 2013

sarehu posted:

There's no reason some class shouldn't just say "push your code to this git thing" or something though. Like how one or two math classes I had were just like, "You must use LaTeX -- figure it out."

TBH, I probably would have started using it much earlier and saved myself quite a few hours fixing broken homework assignments if "git add", "git commit", etc. were all on the paper that got handed out at the start. I was too lazy to spend the ten minutes figuring out which commands did the basic things for a really long time.

Skandranon
Sep 6, 2008
fucking stupid, dont listen to me

ExcessBLarg! posted:

This is seriously fundamental stuff in our discipline.

Lots of things are fundamental to doing CS in a practical manner, but that can be said about using operating system, spreadsheets, the internet. That doesn't make them Computer Science subjects. There's a better argument that basic computer literacy should be taught for all higher education at this point, and probably earlier in high-school, in the same way we consider English classes to be essential. Even more so. Which is more important, appreciating Shakespeare, or being able to effectively use the fundamental tools of the 21st century.

shodanjr_gr posted:

Except "Computer Science" as you are defining it would probably be limited to algorithms, discrete math, complexity and maybe theoretical aspects of databases/structures. Like it or not, relatively few places offer degrees in Software Engineering while a lot of places offer degrees in Computer Science. And degrees should arguably conform to the expectations of the job market (even more so in the US where degrees are largely viewed as a financial investment). We could also get into a discussion about whether Software Engineering is "applied" Computer Science. The point is that CS programs already try to teach a largely applied curriculum. However most of them do a bad job at it.

I don't think this should be the case, and is a much larger discussion as to the role of universities in society in general. The problem we face now is that most CS courses do not meet the expectations of industry, but that doesn't necessarily mean that the courses itself need to change.

Skandranon fucked around with this message at 05:20 on May 19, 2015

Master_Odin
Apr 15, 2010

My spear never misses its mark...

ladies
Some people in CS1 starting out lack fundamental computer skills (such as "what is a zip and what do I do with it?!"). Trying to get them to use the command-line is not something I'd care to have to deal with when invariably one of them messes up their repo beyond repair of a GUI. If you're going to teach VCS briefly to people, you invariably probably want to wait till one of the upper levels where you have people that are not clueless about CS in general.

Jsor posted:

I don't think "learning git" really needs any great fanfare, it's pretty minor. The reason I'm advocating it at my school is mostly because we have a hosed up submission system and git has a double bonus of getting people used to it, but mostly just because it can standardize things without having to roll too much new internal software. (Plus as a TA then I can grade on multiple computers without having to resort to things like sftp-ing the entire turnin directory into my dropbox folder, which immediately goes out of sync the second there's a late submission. It also gives graders diffs so they know what they had to change to get a submission to work correctly)
My school's CS department published our submission server on Github if it's any help to you. It runs students submissions, generates a diff file, etc. It's used against C++ (CS2/Data Structures) and Python (CS1) at the moment with Java support being done over the summer. We'll also be releasing the grading component of this as well over the summer. Feel free to PM me any questions you have about it though Git might be easier for you to push on the administration. https://github.com/RCOS-Grading-Server/HWserver

ExcessBLarg!
Sep 1, 2001

Safe and Secure! posted:

It sounds to me like you're talking about git in particular, like you don't wish people were taught about version control in school so much as you wish people were taught about git in school.
No, not git specifically. It's reasonable example system, at least given it's popularity, but any modern DVCS (Mercurial being another obvious choice) would be appropriate.

Safe and Secure! posted:

Git puts a really huge emphasis on some of those, but that doesn't make them important to using a version control system. Unless you're using git. Which is a flaw in git, I think, which leads to students being taught to use really flawed tools just because those tools are popular in industry.
Merge conflict resolution is very much fundamental to any revision control system with more than one user. With CVS or Subversion, anytime someone commits a change to a file after your last update that you later modify, it has to be merged on commit. If your modifications are overlapping or even just "near" each other, there's a good chance it requires manual resolution. This is only avoidable if you're lucky to be the only one working on "that part" of the project since last updating.

CVS and Subversion both supported branching and are somewhat regularly used, although fairly heavyweight. Branching is a fundamental concept in DVCSes since each repo clone is effectively a branch, and merges are often a necessary step between pull/push operations. Yes, named branches are particularly associated with git, but other DVCSes encourage local clones as branches.

Safe and Secure!
Jun 14, 2008

OFFICIAL SA THREAD RUINER
SPRING 2013
Right, maybe branching is a fundamental part of how a modern VCS works, but you still don't need to know how it works to use one (unless that VCS has some UI flaws). Knowing how merging works isn't that important either as long as the tool is clear ("this part came from your copy of file A, this part came from their copy of file A, what do you think the new copy of file A should look like?") about what can't be merged automatically and what it's asking you to do about it.

You don't teach grandpa how processes and threads work when showing him how to use Windows even though they're fundamental to operating systems because you don't need to know about them to use Windows. Maybe several other operating systems require their users to know about them in order to accomplish basic tasks, but that just means those other operating systems suck. It doesn't mean that understanding processes and threads are an important part of using an operating system.

You only need to worry about branching in git (and mercurial?) because it isn't completely obvious what each command does for people who have never seen those or any version control system before. I see that as a UI problem, not an education problem.

down with slavery
Dec 23, 2013
STOP QUOTING MY POSTS SO PEOPLE THAT AREN'T IDIOTS DON'T HAVE TO READ MY FUCKING TERRIBLE OPINIONS THANKS

Safe and Secure! posted:

You don't teach grandpa how processes and threads work when showing him how to use Windows even though they're fundamental to operating systems because you don't need to know about them to use Windows.
if he was going to college for a degree in windows I might

Safe and Secure!
Jun 14, 2008

OFFICIAL SA THREAD RUINER
SPRING 2013
Okay, sure, when grandpa goes to college for a degree in git, teach him how a a DVCS works.

But if grandpa is just going to graduate and get a job in an office where his computer runs windows, he probably doesn't need to know how threads work, even though he's going to use Windows every day and his coworkers are going to be really upset if he doesn't use it properly.

Safe and Secure! fucked around with this message at 14:38 on May 19, 2015

down with slavery
Dec 23, 2013
STOP QUOTING MY POSTS SO PEOPLE THAT AREN'T IDIOTS DON'T HAVE TO READ MY FUCKING TERRIBLE OPINIONS THANKS
So I guess we shouldn't teach C to people who don't major in C either.

I'm sorry but there's no reason a computer science major shouldn't be exposed to VCS and learn how to use them if college is at all supposed to "prepare you for the real world"

Blotto Skorzany
Nov 7, 2008

He's a PSoC, loose and runnin'
came the whisper from each lip
And he's here to do some business with
the bad ADC on his chip
bad ADC on his chiiiiip
Make the third lab for CS102 have a component with some basic VCS stuff and rudimentary testing. Boom, done.

comedyblissoption
Mar 15, 2006

I took a class for my CS curriculum which was dedicated to teaching a waterfall-like Software Development Life Cycle. It was worthless garbage. I could imagine a similar horrible justification for teaching Agile Engineering Best Practices.

Teaching how to write correct and readable code is good from an academic and job-having perspective and is far more important. VCS should only be mentioned as a "maybe you should look into this yourself" tool and not something that a professor or TA has to handhold a class in and have students come into their office asking to fix their hosed up git repo.

Skandranon
Sep 6, 2008
fucking stupid, dont listen to me

down with slavery posted:

So I guess we shouldn't teach C to people who don't major in C either.

I'm sorry but there's no reason a computer science major shouldn't be exposed to VCS and learn how to use them if college is at all supposed to "prepare you for the real world"

College/University isn't actually supposed to do this. They are supposed to teach you how to learn. You're thinking of a trade school. A trade school teaching programming should definitely teach multiple version control systems.

pr0zac
Jan 18, 2004

~*lukecagefan69*~


Pillbug

down with slavery posted:

So I guess we shouldn't teach C to people who don't major in C either.

Yeah pretty much. You know, like how a lot of CS programs currently don't teach C.

Fellatio del Toro
Mar 21, 2009

Did you guys not have electives or something?

My university required a core CS curriculum covering the fundamentals and then you could take a bunch of software engineering classes or be a dipshit like me and take a bunch of math classes that I'm never gonna use.

pr0zac
Jan 18, 2004

~*lukecagefan69*~


Pillbug

Fellatio del Toro posted:

Did you guys not have electives or something?

My university required a core CS curriculum covering the fundamentals and then you could take a bunch of software engineering classes or be a dipshit like me and take a bunch of math classes that I'm never gonna use.

Yeah but the one time a year you get to whip out your mad euclidean geometry skills you feel real cool. :whatup:

down with slavery
Dec 23, 2013
STOP QUOTING MY POSTS SO PEOPLE THAT AREN'T IDIOTS DON'T HAVE TO READ MY FUCKING TERRIBLE OPINIONS THANKS

pr0zac posted:

Yeah pretty much. You know, like how a lot of CS programs currently don't teach C.

I think you'd struggle to find a computer science programming that doesn't teach a programming language

Skandranon posted:

College/University isn't actually supposed to do this. They are supposed to teach you how to learn. You're thinking of a trade school. A trade school teaching programming should definitely teach multiple version control systems.

Yeah it would be nice if this was how reality worked but it's not, a vast majority of the computer science undergrads are planning on entering the workforce after graduation and it would be nice to spend a single class preparing them to use a modern toolchain.

Munkeymon
Aug 14, 2003

Motherfucker's got an
armor-piercing crowbar! Rigoddamndicu𝜆ous.



ExcessBLarg! posted:

Free revision control was pretty crummy until Git, Mercurial, and other DVCS systems came out about ten years ago. Even if CVS and Subversion were usable, the barrier of setting up a central repository put those tools out of reach for a lot of folks for use on personal projects.

Of course, now with powerful, (relatively) easy to use tools, and free services like GItHub and Bitbucket, teaching revision control early is really a no brainer. But it's only really been that way for about five years now, and it takes a while for education to catch up.

You're seriously overstating how much better git, Mercurial &c. are than SVN here - especially to throw together a local repo for a personal project.

Skandranon
Sep 6, 2008
fucking stupid, dont listen to me

down with slavery posted:

Yeah it would be nice if this was how reality worked but it's not, a vast majority of the computer science undergrads are planning on entering the workforce after graduation and it would be nice to spend a single class preparing them to use a modern toolchain.

I feel your pain, but this is more to do with people going to University for the wrong reasons, and Industry expecting the wrong things from University. That still doesn't make any of these things "Computer Science". That definition shouldn't be turned into "programming" just because it's too much effort to create a good definition for "Software Engineering". Computer Science is about the science of computation, not how to effectively work on large software projects.

22 Eargesplitten
Oct 10, 2010



Evil_Greven posted:

Take something like C++, a marketable language, and throw it at people who have never programmed anything before.

It is not really a good language to learn programming. They will spend a lot of time partly figuring out the syntax/libraries and just throwing code at a wall to see what sticks.

Why do you say that? I started with C++, all but one of my CC classes were C++. I felt like it was a good one to start out with because while I'm sure it has libraries as extensive as Java, they weren't apparent. So we got the ease of a high level language without being able to cheat and just constantly call foo.bar() for every data structure.

Also, that way we didn't have to learn how to make different classes in different files until we got to the object-oriented section. And we learned good habits like initializing variables and prototyping functions, which aren't necessary in Java.

I know you didn't say people should start with Java, that is just my only other point of reference.

JawnV6
Jul 4, 2004

So hot ...

Blotto Skorzany posted:

Make the third lab for CS102 have a component with some basic VCS stuff and rudimentary testing. Boom, done.
I'm not taking a hardline against it being taught, something like this makes sense. My entire introduction to verilog was a handout and a bored TA, I'm pretty sure CS programs have the bandwidth for a 15 minute intro to this topic. Not intro classes but later coursework should be complex enough to necessitate VC. Like OOP it's much easier to appreciate after a burn or two.

It's stupid poo poo like this that gets my goat:

revdrkevind posted:

I think at this point learning programming should begin by configuring your git repository. The end of the hello world should be a git push.
Reminds me of the CS program that started off CS101 with an in-depth look at Makefiles. Before "hello world" there was a quiz on what happens to .o files during linking. A fantastic way to suck all the potential joy about getting to control a machine and going off into the weeds on minutia that can easily be provided until more fundamentals are in place. But hey, Programmers Should Know Makefiles so lovely pedagogy is ok.

Star War Sex Parrot
Oct 2, 2003

You guys should make a new thread if you're interested in debating and discussing the merits and shortfalls of university CS and SE programs.

Thermopyle
Jul 1, 2003

...the stupid are cocksure while the intelligent are full of doubt. —Bertrand Russell

edit: damnit SWSP

Star War Sex Parrot
Oct 2, 2003

Thermopyle posted:

edit: damnit SWSP
That was a drat good effort post that you'd written, too :(

an skeleton
Apr 23, 2012

scowls @ u

Star War Sex Parrot posted:

You guys should make a new thread if you're interested in debating and discussing the merits and shortfalls of university CS and SE programs.

i would be down for this but am not talented enough to create the OP. someone do it!!!

Thermopyle
Jul 1, 2003

...the stupid are cocksure while the intelligent are full of doubt. —Bertrand Russell

Star War Sex Parrot posted:

That was a drat good effort post that you'd written, too :(

It makes the effort worth it if you thought it was good!

Linear Zoetrope
Nov 28, 2011

A hero must cook

an skeleton posted:

i would be down for this but am not talented enough to create the OP. someone do it!!!

I can do it later today if nobody else wants to. I don't think it needs to be all that fancy, tho.

Cicero
Dec 17, 2003

Jumpjet, melta, jumpjet. Repeat for ten minutes or until victory is assured.

an skeleton posted:

i would be down for this but am not talented enough to create the OP. someone do it!!!
Don't let that stop you. I made the OP for this thread when I'd never even had a real programming job except for an internship!

Star War Sex Parrot
Oct 2, 2003

Jsor posted:

I can do it later today if nobody else wants to. I don't think it needs to be all that fancy, tho.
Some talking points that might spur conversation:

Programmer Competency Matrix
Google's Guide to Technical Development for Students (basically what skills or activities Google would like CS students focus on to become successful Software Engineers)

Edit: Please post a link if someone ends up posting a thread, as I'd be interested in participating and talking about my university's programs as well.

Star War Sex Parrot fucked around with this message at 22:42 on May 19, 2015

Skandranon
Sep 6, 2008
fucking stupid, dont listen to me

Star War Sex Parrot posted:

Some talking points that might spur conversation:

Programmer Competency Matrix
Google's Guide to Technical Development for Students (basically what skills or activities Google would like CS students focus on to become successful Software Engineers)

Edit: Please post a link if someone ends up posting a thread, as I'd be interested in participating and talking about my university's programs as well.

Wow, instead of levels 1 - 2 - 3 - 4, he uses 2^n, n^2, n, and log(n). This guy is the biggest nerd ever...

Evil_Greven
Feb 20, 2007

Whadda I got to,
whadda I got to do
to wake ya up?

To shake ya up,
to break the structure up!?

22 Eargesplitten posted:

Why do you say that? I started with C++, all but one of my CC classes were C++.
...
I know you didn't say people should start with Java, that is just my only other point of reference.
I don't want to respond too much here per mod request, (I will in the proposed thread)but check this link between now and then.

Tezzeract
Dec 25, 2007

Think I took a wrong turn...

Safe and Secure! posted:

TBH, I probably would have started using it much earlier and saved myself quite a few hours fixing broken homework assignments if "git add", "git commit", etc. were all on the paper that got handed out at the start. I was too lazy to spend the ten minutes figuring out which commands did the basic things for a really long time.

Same here. I'd consider Git somewhat advanced knowledge that beginners absolutely need a cheat sheet for. It's a really cool and vital piece of technology that forces you to think in graphs, trees, nodes, references, remotes and locals and gives you weird looking syntax unless you happen to be a bit of a Linux kernel hacker.

But when I was a beginner um, I just want to commit a piece of code? How the heck do I make my changes go onto the server? What the heck is master and origin? It's a bit of a mess.

It honestly took me two to three projects and a full time job before I really figured it out. That said, I really like Git now :v: and it's probably Stockholm Syndrome.


Also with regards to the LaTeX thing, the funny thing is that I bet you most people don't really learn the tool properly and just force the markup (downs?) until it looks nice. LaTeX is just so slow outside of equation writing, where it's really fast.

America Inc.
Nov 22, 2013

I plan to live forever, of course, but barring that I'd settle for a couple thousand years. Even 500 would be pretty nice.
I'm a freshman community college student and I'm trying to figure out which universities to apply for in the fall. I'm looking to stay in California and I have a fee waiver that allows me to go to state colleges tuition-free. I've looked at college rankings for Computer Science but I feel like I need a more detailed source of information when it comes to comparing colleges. College counselors can sometimes be an echo chamber.
Here's a summary of where I stand now as a student, copied from an email I sent to Caltech's admissions department:

quote:

I am currently a freshman community college student majoring in Computer Science and I am applying for a summer internship with Caltech's Graduate Aerospace Laboratories. I have an interest in robotics and neural networks and I have a 3.77 GPA.
I participate in my college's STEM program and their aerospace and Computer Science clubs; I am currently doing a research project with my college's STEM program and I have participated in three hackathons on behalf of my college's Computer Science club. I have finished Calculus I-III and I am currently taking Linear Algebra and Calculus-based Physics.

Adbot
ADBOT LOVES YOU

Space Whale
Nov 6, 2014
Technical interview with Amazon later today. The first one.

What should I expect? I've been a developer for three years, so I tend to think more about "oh this is figured out, I'll check my sources if I forgot this data structure is good for this or that based on bla bla foo foo foo" than stuff like "stack vs queue for breadth and depth traversal!" Is this going to bite me in the rear end or is that to be expected?

Also should I be ready for "hash your integers for 2sum" type poo poo or stuff more like "linear probing with a hash means worst case is gonna be O(constant for the hash + n for the list built off of that single bucket since the hash is literally awful) or on average just more like O(c)" ?

STILL waiting on the SF joint to say yes or no. I'd take it if it was offered. Generally an amazon interview scheduled means an offer too good to refuse comes up right before the actual interview, so let's see if that happens again this time!

  • 1
  • 2
  • 3
  • 4
  • 5
  • Post
  • Reply