Adding more to this thread: below is the redacted conversation that inspired this question. My friend & I both work{ed} at FAANG companies, don’t have undergraduate degrees, we took the bootcamp path a few years ago
Conversation: 👤Friend:
I’m thinking about doing Columbia University’s General Studies undergrad program, which is tailored for working professional’s who come from non-traditional backgrounds (Ex: starting college later in life, have lots of life experience, looking to get back into academics).
👤Me:
I attempted doing UC Berkeley undergrad part-time, while working full time and I’ll share my experience. For context I got a full time programming job at Salesforce right after graduation from a coding bootcamp in 2016 in the summer right before the fall I was admitted as an incoming 3rd year undergraduate transfer (my major was Sociology..nothing to do with CS). Berkeley doesn’t an official program for part-time undergrad students, that I’m aware of, but they do for master’s + level degrees.
My personal experience trying to get undergrad degree + work full time:
I’m not saying traditional education isn’t good, but I think for a bootcamp graduate from a caliber coding bootcamp like “Hack Reactor”, “Codesmith”, “Fullstack Academy of Code” etc… its not too useful to go back to a traditional undergraduate setting when there are now respectable good alternatives educational institutions like Bradfield nowadays.
There are few people championing the non-traditional path in research (as mentioned in the original question post) that I know of, but I wish I knew more folks:
Jason Benn - a classmate of mine at Bradfield (bootcamp grad too) went from Devbootcamp (2013) to Machine Learning engineer and researcher. Fun fact: he’s the programmer that Cal Newports mentions in his book “Deep Work”.
Richard Artoul (HRX & Bradfield alum) — I’m not sure if Richard is writing research papers, but this doing pretty deep stuff in Database engine internals. This is some of his work below:
Kyle Kingsbury – does distributed systems research (creator of jepsen - A framework for distributed systems verification, with fault injection) I think he holds an undergrad degree in physics, and no postgrad degree (doesn’t have LinkedIn)
Personal Opinion(s):
If you’re in the situation of being a software engineer in the field already without a “formal education” and you want to dive deeper into the topics that the top computer science departments in the world have done an excellent job at identifying over the past few decades, consider Bradfield (not endorsed by them, I like their mission + took 6 classes here)
forking 10-50k on an undergrad degree, even if it is a brand name, not only sounds expensive financially but also from a time investment perspective, especially if you have a job & want to continue doing well, and/or have other obligations like a family.
If you want a fancy master’s degree, I know Oxford has an undergrad program that doesn’t require an undergrad degree; you just need a strong amount of work experience, demonstrated work work & recommendations. A friend of a friend I know worked at SOME_FAANG_COMPANY , did this It costs like 50k though and its a huge time investment outside of work, and again, I’m not a fan of the curriculum, since its very general IMO. If you’re chasing prestige, I think its not a good use of your time to go back to undergrad
My view seems a bit different than what’s already here so: choose one or the other. There’s nothing wrong about putting all the logic in the app. There’s nothing wrong about having the app interface with the database through views and stored procedures that do all the business logic. The pain arrives with trying to find some threshold / splitting the responsibility in an arbitrary way that’s more justified to one person than another. Choose one, be consistent and you’ll be fine.
I think you can’t go terribly wrong with either choice as you mentioned; some other responses in here did mention interesting use cases for putting it in the DB layer (but again context informs so much) like
Choose one, be consistent and you’ll be fine. this is a good reminder ^
Q1: hard question. Basically use heuristics to find the best fracture planes depending on team organization/ownership + understanding of the solution + maintenance burden + coupling + technical constraints.
Depending on what you decide to implement in the database, it will be able (or not) to scale computations over data. Having remote stateless applications allows to scale computations at the expense of bandwidth. my 2 cents in 2 minutes.
Q2: https://rob.conery.io/2015/02/21/its-time-to-get-over-that-stored-procedure-aversion-you-have/
Basically use heuristics to find the best fracture planes depending on team organization/ownership + understanding of the solution + maintenance burden + coupling + technical constraints.
Well articulated & succinct outlining of lots of the variables involved. Thanks for the stored procedure article
Sometimes it is useful or even required from the performance point of view to have computation near the data just to not transfer it through the network - not talking about data validation but, for example, reporting. There are other solutions to reporting problems but most straightforward and requiring often less code is to just run a stored procedure. With all of the drawbacks of stored procedures.
Sometimes it is useful or even required from the performance point of view to have computation near the data just to not transfer it through the network
This is a really good point on data locality. If your database server’s hardware specs are significantly better than your app servers, then this could help improve performance a lot
I would argue that the DB is responsible for data integrity and thus should validate the format of an email address if possible.
IMHO the DB is responsible for data integrity, data formatting, data storage, and data extraction and transformation (if possible).
That last point is something that I’ve seen ignored a lot. I’ve seen countless apps pull a huge amount of data from the DB, do a trivial transformation, and store it all back when the DB could have done it faster, safer, and more clearly in situ.
I would argue that the DB is responsible for data integrity and thus should validate the format of an email address if possible.
I like this perspective, adding on to the “if possible” statement: If its not easy to enforce in DB, its hard to modify/contribute/maintain, it’s might be a good idea to handle it in the code if your language of choice can do a better job Interestingly after reading so many of the responses in the thread, I can see the benefit of putting the logic at the DB layer and/or app code
Why can’t a db validate the format of an email address? The pattern is known, even if the RFC is crazy compared to real email addresses.
I recommend using the regex from HTML5 spec. Much simpler and very relevant as that’s what browsers use for input=email
edit: link: https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address
For the most part, the validity of the email address itself is not an issue, it’s whether the user can be contacted by it. Knowing this requires a dance of sending the email and verifying that the user got it, which is way beyond the purview of the database. I usually don’t see a point in going beyond NOT NULL
on a database field for email.
I think it makes sense to (perhaps in the UI) just do a sanity check, like an @
sign, just to fix up any big fat-fingers. Before the TLD explosion, it was pretty easy to ensure the TLD also, but that’s over(yes purposely ignoring UUCP/bang-path type addresses).
Otherwise I basically agree with you. NOT NULL UNIQUE
forces the email field to do what you need it to do that you can control: be a unique identifier. If it happens to also work for communication, bonus! :)
Why can’t a db validate the format of an email address?
You gotta good point; you can validate an email address at the DB layer for sure. I looked into this a bit more now that you mentioned an RFC
There is a really good response here by this DBA suggesting similar thought of using the HTML5 email regex spec “if its good for HTML5/browser its good for the rest of us” - https://dba.stackexchange.com/a/165923
I find this interesting as over the past few years, there has been a rise in block based editors / apps. For example:
As someone who is a note maker, I’m most fascinated about building block based experience that compile down to simple primitives like pieces of markdown. I take notes in my text editor in markdown files. Sometimes I wish I could toggle into an editor mode like notion & quickly revert back to text-editing mode.
I found this OS VueJS library which recreates the notion block editor experience, one day..to hack on it https://github.com/CedarXi/All-in-one
I don’t have too much to add (will read article later..), but I want to cross reference a thread on this topic which got a lot of responses from lobster community “how much logic should I keep at the database vs application layer?”