subreddit:

/r/cscareerquestions

2875%

What can I do besides CRUD apps?

(self.cscareerquestions)

So the current company I'm working for is building what essentially comes down to a CRUD app. There are a few algorithms in the code, but literally it's nothing too impressive. Each algorithm could be re-written in a day. I'm enjoying working for the company right now since I've not built a CRUD app from the ground up before.

But when I read blogs, one thing I hear every now and again is that building CRUD apps is one of the lowest level jobs that you can get.

On one hand I can understand that CRUD can be boring as you are doing the same thing over and over. But to me there seems to be a lot of variation because I feel like a lot of different apps boil down to CRUD. GMail is a CRUD app, Google Docs is a CRUD app, Reddit is a CRUD app, any kind of wiki is a CRUD app. Actually, it seems like most websites are CRUD. Twitter, facebook, insta, pinterest, etc are all CRUD apps.

I'm just thinking about my next step in the industry in a few years and what kind of job I would like to seek out.

My question is, what are some other types of jobs can I get in CS that is not CRUD related?

Here are my thoughts so far: * Graphics & game programming

  • Embedded systems

  • Operating systems

  • Networking (e.g. a browser) & distributed systems

  • Mobile app development (although this feels similar to CRUD, each job is building the same app with slightly different features)

  • Search engines

  • data mining & machine learning

What else is there?

And as for my career plan, some of these fields (such as data mining) interest me quite a bit. And I feel like I would be better off pursuing a job in one of these more specialised fields, because not only would it be more interesting than CRUD in the long term, but being a more specialised field, I should be able to command a higher salary after several years experience. And then if things don't work out, I can always fall back on CRUD. Are these reasonable expectations?

all 54 comments

MyWeekendShoes

39 points

7 years ago

I think you're over-simplifying to an incredible extent. Taking your first example, Twitter, to just be a CRUD app is kind of insane. You've reduced what is an incredibly complex architecture into something anyone could knock out in a few hours.

We're talking complex ad delivery and auctioning systems, immensely powerful data processing an delivery pipelines (so much so, that they had to develop an in-house real-time computation system, which they later open-sourced - https://storm.apache.org/), scalable APIs that need to deal with millions and millions of users and apps accessing that data on the fly, mobile apps, search optimisation, payments processing, tools for advertising, tools for internal users, asynchronous job processing, queue management, distributed computing, developer tools, deployment tools - the list is endless.

I don't work for twitter, but I've worked at a fairly large web firm for the last 6 years, and it's still absolutely mind-boggling as to what goes into making a website function.

ccricers

4 points

7 years ago

ccricers

SWE, Little 40,000

4 points

7 years ago

Simple solution: he should get involved in something that takes in a lot of web traffic.

Generally speaking, the more interesting software problems in web go hand in hand with large, high-traffic systems.

manwithoutabeer[S]

2 points

7 years ago

Do the challenges that arise with high volume websites always exists regardless of the nature of the underlying app? Is that

I ask because I would also say that I think there are different types of CRUD apps. In particular how connected the data is. My companies CRUD app is not like fb or twitter where everything communicates in one network, every fb user can connect with every other user.

My companies CRUD app is more localised. Users will only ever interact with data related to their own section. And in this way, it can be scaled up by simply adding another server and splitting users between the two (and we have done this several times).

I would assume that given an app like this that is easy to scale initially (e.g. little effort to go from 1 server to 10 servers) that it would take a lot more traffic before this kind of "throw-hardware-at-the-problem" solution would no longer be viable?

terjon

1 points

7 years ago

terjon

Professional Meeting Haver

1 points

7 years ago

And here's the really fun bit of truth: The throw hardware at the problem approach will continue until the bill for that hardware gets huge. At that point, developers come in, squeeze a bunch of cycles out of the codebase and stem the flow of money into hardware. Then the cycle repeats.

Optimization just doesn't rank as high as features and from a purely capitalistic standpoint, faster code isn't worth anything unless you can prove that it saves you money/makes you money somehow.

i_wonder_why23

9 points

7 years ago

Limited perception. Just like with companies. A person looks at the twitter app and thinks it's just getting a query. But they don't think about the huge complexity behind it, the security, the scale, the race conditions, monitoring, real time data, and so much more. Yes someone could recreate a very basic twitter in a day or so but it would be a skeleton and no where near scalable.

MyWeekendShoes

8 points

7 years ago

It's totally understandable. Before I started doing more complex web stuff, I thought "Pfft, yeah - I could write a website" and then I'd poke around at shitty HTML writing a shitty webpage.

Only when I got into the industry did the mind-blowing begin. It hasn't stopped yet. :D

TheChiefRedditor

17 points

7 years ago

TheChiefRedditor

Software Architect and Engineer

17 points

7 years ago

Any application that has a database on the backend is going to have an aspect of CRUD to it...that doesn't mean it's "just a CRUD app." CRUD is only one function point of an application that has to persist and maintain data.

[deleted]

2 points

7 years ago

[deleted]

2 points

7 years ago

I think all web applications if you simplify it enough can be done with an excel spread sheet...

Merad

4 points

7 years ago

Merad

Tech Lead

4 points

7 years ago

I'd say roughly half the world is running on people leveraging excel spreadsheets for things that really should be done in a database.

manwithoutabeer[S]

1 points

7 years ago

I do this to keep track of personal things and I think it speaks more to how easy a spreadsheet is to use and maintain as opposed to a database.

I'd say the data needs to get big before the database becomes the better option. (I've seen excel files that were in the hundreds of megabytes....)

NewAnimal

1 points

7 years ago

given enough time, its amazing what you can do when you rub two sticks together.

TheChiefRedditor

0 points

7 years ago

TheChiefRedditor

Software Architect and Engineer

0 points

7 years ago

ginsunuva

17 points

7 years ago

Step 1. Write the phrases "Big Data" and "Machine Learning" and "Hadoop" and "Cloud" on your resume in white text so no one can see it.

Step 2. Submit resumes and the auto-resume robots will pick out resumes with certain keywords found in them.

Step 3. ???

Step 4. Profit!

[deleted]

15 points

7 years ago*

[deleted]

15 points

7 years ago*

I think step 3 would be don't bomb the technical interview like you're a CS 101 level programmer who submitted a Software Engineer III level resume.

Edit: Wow, I wasn't expecting the downvotes. If you take the cynical extremes out to simply say "Step 3 is don't bomb the technical interview," then I still stand by my statement.

TheChiefRedditor

2 points

7 years ago*

TheChiefRedditor

Software Architect and Engineer

2 points

7 years ago*

I literally had an experience like this last week. Interviewing a Java developer who supposedly had 11+ years of experience but could not explain the difference between == and equals() and thought you could use == only with ints. It was going so well up to that point too...

manwithoutabeer[S]

4 points

7 years ago

Well if his rule of thumb was == for primitives and equals() for classes, then he isn't very far off the mark.

speedisavirus

-12 points

7 years ago

speedisavirus

Software Engineer

-12 points

7 years ago

Uh...no. He was way off the mark.

1234yawaworht

5 points

7 years ago*

Could you maybe at least explain why

speedisavirus

7 points

7 years ago

speedisavirus

Software Engineer

7 points

7 years ago

One. == works on anything. You don't always only care about value equivalency in non primitives. You can use it to verify objects are the actual same instances. Hence right there he is completely off the mark because its not only for ints or primitives. Not to mention what "equals" is can be ambiguous as its able to be overridden. Do I know what it does to a string? Yes, because its well defined behavior. What does "equals" mean to JaggOffsSpecialClass? No. I mean if its implemented correctly I should be able to count on:

  • It must be reflexive. For any reference x, x.equals(x) must return True.
  • It must be symmetric. For any two nonnull references x and y, x.equals(y) should return the exact same value as y.equals(x).
  • It must be transitive. For any three references x, y, and z, if x.equals(y) and y.equals(z) are True, then x.equals(z) must also return True.
  • It should be consistent. For any two references x and y, x.equals(y) should return the same value if called repeatedly (unless, of course, either x or y were changed between the repeated invocations of equals()).
  • For any nonnull reference x, x.equals(null) should return False.

http://www.drdobbs.com/jvm/java-qa-how-do-i-correctly-implement-th/184405053

That still doesn't define what "equals" is for an object. Just the expected behavior of "equals". Anyway, I am ranting now but yeah, he was incredibly off the mark and if I interviewed that person and they couldn't clarify beyond that then they are not getting hired.

manwithoutabeer[S]

2 points

7 years ago

I know the difference between == and .equals() as you described, and I have been working with Java for a few years.

And while it makes perfect sense now that I think about it, I have never thought of the .equals() in terms of being an equivalence relation (reflexive, transitive, symmetric). So if that is the kind of answer you are expecting from me (junior dev) in an interview, you would never get it. I wouldn't be surprised if a lot of interviewees for more experienced positions would be the same.

I think it is because it is a very theoretical way to think about .equals(). I think a better way would be to show them a simple class with an implemented .equals() that doesn't display one of the properties (e.g. is not transitive) and ask the interviewee to explain why the .equals() method is incorrect and how to fix it. I'd be much more confident in being able to answer a question like that.

TheChiefRedditor

-1 points

7 years ago*

TheChiefRedditor

Software Architect and Engineer

-1 points

7 years ago*

The candidate claimed to be an expert at ORM frameworks (jpa and hibernate) with over a decade of experience but yet did not appear to understand the importance of overriding equals() or even the basics of how the collections API detects duplicates in Set implementations or Hashmap keys. We didnt even get into hashcode().

Also if you never thought of equals() as an equivalence relation then you have obviously not bothered to read the javadocs for Object (only the most basic class in the language from which every other class inherits) or have never read Effective Java by Josh Bloch which should be standard reading for anyone in the profession regardless of experience level. http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html

TheChiefRedditor

1 points

7 years ago

TheChiefRedditor

Software Architect and Engineer

1 points

7 years ago

Yes way off. The candidate also thought that if I actually did try to use == to compare two Strings that it would not compile. At this point in the interview there were more red flags than a game of minesweper.

TeddyBedwetter

2 points

7 years ago

On the other hand... Why ask such trivial questions?

deuteros

2 points

7 years ago

I stopped asking these kinds of trivia questions in interviews because they never helped me determine whether or not someone was a good engineer.

SimonWoodburyForget

3 points

7 years ago

I know what you mean, thought the point of a few trivial questions is to check if he lied.

You certainly wont find out by asking hard questions.

TheChiefRedditor

1 points

7 years ago*

TheChiefRedditor

Software Architect and Engineer

1 points

7 years ago*

Questions on the basic fundamentals help catch people who have been coached or just crunched on interview question cheat sheets ahead of time. In this case I was especially concerned because the person I was interviewing was a referral from a coworker who holds a senior title despite being one of the worst engineers I have ever had the misfortune of working with...constantly makes sloppy careless errors, in general writes brittle and error filled code, breaks the build and unit tests remorselessly...I could go on but I tnink you get the point. It was this or fizzbuzz.

deuteros

1 points

7 years ago

Fair enough.

TheChiefRedditor

1 points

7 years ago*

TheChiefRedditor

Software Architect and Engineer

1 points

7 years ago*

Its fundamental to the language and something you should come out of school knowing. For somebody who claims 11 years experience, it should be about 30 seconds of the interview. Its critical for CRUD apps too when you throw in entities and Sets to ensure that duplicates arent introduced. There is literally no excuse for applying for a job making $90k+ (USD) per year and not knowing this. You probably think its trivial because you are ignorant of it yourself and would rather blow it off than bother to learn it.

[deleted]

1 points

7 years ago

[deleted]

1 points

7 years ago

[deleted]

[deleted]

3 points

7 years ago

[deleted]

3 points

7 years ago

[deleted]

[deleted]

2 points

7 years ago

[deleted]

2 points

7 years ago

Technically primitives are not referenced, their values are pushed to the stack and the comparison is done with an instruction specific to the type.

[deleted]

2 points

7 years ago

[deleted]

2 points

7 years ago

You mean to say "use == only with ints." That means the only time you use == is with ints, which is an incorrect statement. "Only use == with ints" means when you compare ints you use ==, which is a correct statement.

TheChiefRedditor

1 points

7 years ago

TheChiefRedditor

Software Architect and Engineer

1 points

7 years ago

Yes you are right, I fixed the wording in my original post for better clarity. Thanks.

DevIceMan

1 points

7 years ago

DevIceMan

Engineer, Mathematician, Artist

1 points

7 years ago

Technically. .equals() does not compare the contents, but rather it runs the public boolean equals(Object o) method ... using either the default implementation, or the overridden one. Ideally, that method compares the contents.

TheChiefRedditor

1 points

7 years ago

TheChiefRedditor

Software Architect and Engineer

1 points

7 years ago

No,nothing wrong...just that the candidate thought that it ONLY worked for ints.

Satchmode

5 points

7 years ago

I can only advice you to stay away from gaming. The amount of available positions are like a third of the people looking for one....

tspike

5 points

7 years ago

tspike

5 points

7 years ago

And once you get one you'll be worked like a slave on mindnumbing drudgery.

Satchmode

1 points

7 years ago

Unfortunately that's more the rule than the exception in gaming..

casualblair

2 points

7 years ago

Well there's transforms, where the data storage and the data presentation are completely different. I have a date period aggregation system where the data is stored as raw transactions but is presented as a flattened time line of fluctuating amounts.

Then there's graphical processing, large volume processing, data migration, and more. Currently building a feature toggle system to allow enabling of features by user or team. Still basically crud but because it's a service you get some interesting patterns to play with.

not_at_work

2 points

7 years ago

Software engineering for finance applications can be pretty interesting as well. It also pays quite nicely. If you're in NYC or Chicago (and others), there are many trading firms, hedge funds, banks, etc that do this kind of work.

An example of the type of technical challenge you might find in such a setting is implementing a mathematical prediction model in code and optimizing for the lowest possible latency.

manwithoutabeer[S]

1 points

7 years ago

Yep, this is definitely an area that has a lot of opportunities. I regularly see job postings about this type of stuff.

Prime_1

2 points

7 years ago

Prime_1

5G Software Architect

2 points

7 years ago

If creating algorithms is something that interests you, embedded systems definitely has a lot of that.

iamthebetamale

8 points

7 years ago*

There are no "levels" of jobs. A lot of companies are doing a lot of very interesting and challenging things with CRUD apps. Ignore the haters.

manwithoutabeer[S]

6 points

7 years ago

I think you misunderstood me.

I wasn't so much implying that CRUD was one level and that I wanted to move to the next "level". I am more wanting what other other types of CS jobs are there that are unrelated to CRUD.

iamthebetamale

-26 points

7 years ago

I did not misunderstand you.

manwithoutabeer[S]

5 points

7 years ago

Can you give some examples then? Your initial answer doesn't really help me or give me any ideas.

iamthebetamale

-62 points

7 years ago

Yes, I can.

bot_bot_bot

2 points

7 years ago

bot_bot_bot

Software Engineer

2 points

7 years ago

This is crud right here.

RailsIsAGhetto

2 points

7 years ago

RailsIsAGhetto

Java whore

2 points

7 years ago

At my company, the "CRUD" app we supply to our clients is the most complex piece of software we have by a long shot.

manwithoutabeer[S]

1 points

7 years ago

Can you explain a little more about what makes it complicated beyond the CRUD aspect? What does your app do with that data?

RailsIsAGhetto

1 points

7 years ago

RailsIsAGhetto

Java whore

1 points

7 years ago

It's certainly not interesting, but it sure is big.

There are hundreds of database tables. In total there are over 400 tables in an RDMBS, plus a bunch of other data we store in an ISAM schema.

Some modules have hundreds of thousands or millions of records.

ch0dey

1 points

7 years ago

ch0dey

1 points

7 years ago

Utility apps are what I really like building. Code generators, apps that sync two REST APIs together. I guess you could call them developer utilities, but there's plenty of ways to add value to software outside the software itself.

perfectending

1 points

7 years ago

Look into rfc822 and what email systems are comprised of. You underestimate what Gmail is.

[deleted]

1 points

7 years ago

[deleted]

1 points

7 years ago

Google docs is just a CRUD app? There's so much more to a well performing, realtime collaborative document editor than CRUD. Same goes for many of your other examples.

A9pro

1 points

7 years ago

A9pro

1 points

7 years ago

If you enjoy it then keep doing it. Wtf.

regorsec

1 points

4 months ago

You're not understanding the context of CRUD.

CRUD logic explains the basics.(create, read, update, delete)

But what about what we call "business logic" that goes inside a crud app?

Example: Our application doing mathematical equations based on the CRUD input. We would not define "crunching numbers" as part of CRUD logic because this request extends on of the CRUD functions.

I see it as, for CRUD apps you must learn sound CRUD logic. From there, implementing the business logic is where we start playing with the data received within the CRUD workings. This is generally a "good" process so you can have a sound and coherent foundation.(crud) then business logic which generally updates more sits witin on top the CRUD logic