Ask HN: What are the most interesting emerging fields in computer science?
What do you think is the most interesting emerging field in Computer Science? I'm interested in PHD areas, industry work, and movements in free software.
What do you think is the most interesting emerging field in Computer Science? I'm interested in PHD areas, industry work, and movements in free software.
The basic idea is developing methods for two (or more) parties with sensitive data to be able to compute some function of their data without having to reveal the data to one another.
The classic example is developing an algorithm that allows two people to figure out who is paid more without either revealing what their salary is.
Such algorithms get significantly more complicated if the threat model starts changing from "we're all acting in good faith, but we just don't want to share this private info" to "I'm not sure some of the people involved in this are acting in good faith."
Based on my (admittedly limited) look into this field, it seems like there has been some theoretical progress made here, but there's nothing like a generalized framework or library for general development with it. Instead, practical applications seem to be one-offs. For example, a contractor a while back developed a system that lets parties (nation-states or private space firms) figure out if their satellites are going to run into each other without revealing anything about the location or orbit of their satellites. That way they don't share sensitive data, but they can move their satellites if they're on a collision course with somebody else.
Personally, I got interested in this when working for the government. I was working on an extremely cool data integration project (State Longitudinal Data System grant form US Department of Education) that basically went nowhere because we couldn't get over the legal hurdles to data sharing... If we didn't have to share data, but could still compute interesting statistics about the data, that would have been really cool.
If we can find ways to perform secure, multi-party computation, we could develop fully distributed computational, networking, and power delivery systems.
Your solar roof tiles could be, basically, CPUs or GPUs with embedded wireless networking.
So, let's now bring IoT into the mix. You and I have smart houses, with smart solar tiles. John attacks our tiles plus all our neighbors and directs a major electrical spike towards our local substation. Now it's a physics question, where are all those joules of energy going? It's a heat problem and right now there is no way to dissipate that heat from the system which will melt our substation. Let's say our neighborhood is between several other neighborhoods and the main power station, we just killed a node and guess who else doesn't have access to power because they don't have tiles like we do.
That's the basic concept on why security and authenticity are important in relation to the energy grid. It would be nice if there was an effective way to dissipate an "electrical DDoS"? I'm not sure if it's called something else. If you're interested in the energy dissipation within the energy grid, this is a great question on SE. [2]
That all said, is also a major reason why the government is consistently freaking out about our power grid being hacked.
[0] https://en.wikipedia.org/wiki/Continental_U.S._power_transmi... [1] https://en.wikipedia.org/wiki/Northeast_blackout_of_2003 [2] https://electronics.stackexchange.com/questions/117437/what-...
Individual tiles could store and compute and cooperate in a mesh network.
To make something like that feasible, it needs to be secure and reliable. In the privately-owned case, I want to ensure that an adversary who gains access to the “grid” can’t exploit it against me. Think of it as having a raspberrypi on the outside of your house where anyone could tamper with it.
In the public scenario, you would want users to be able to offload computational tasks to an ambiantly available computational resource. Some of that computation will need to be local, and for disaster planning reasons, would be helpful if distributed in nature. But, in order for Joe and Jane Schmoe to rely on such a resource, they would want to know that their data isn’t being stolen or shared with others.
This video course too : https://www.cse.iitb.ac.in/~mp/crypto/mpc2017/
Agreed, it is a very interesting area!
I'd love to be able to play with some of these ideas in my current favorite (but alas not mathematically-speedy) language (Elixir), if anyone had any sort of intro guide to HE or MPC, would love to have a look
I view both of these things as methods to perform secure computation on encrypted data. sMPC has a lot of applied research behind it while FHE has been mostly theoretical up until a decade ago. I think we'll see FHE catch up with sMPC soon here as there are technical limitations to sMPC systems that FHE doesn't have.
There was a fascinating area I read about in grad school focused on deniable database retrieval, an extension of oblivious transfer.
I've long forgotten the papers and they had some efficiency issues, but seemed like the work could be revolutionary if expanded to building routing networks that prioritize privacy and anonymity.
Smarter people than me can point out this is naïve or old or broken or limited in application or otherwise not worth pursuing. I thought it seemed fun at the time though.
Is there actually any way to do that without leaking the salary? If Bob wants to know Alice's salary couldn't he just run the calculation multiple times with different numbers as his salary?
Similarly Google has started using methods like federated learning to learn from ML models without ever sending your data to the cloud.
The idea is certainly gathering traction, and it will be very interesting where this is going to from here.
Science changed a lot in the last decades, moving from a genius in a room looking at the data and coming up with grand theory to have vast amounts of data that no single human can make sense of. The work of the computer scientist is to quickly understand problems from various fields then solve it using tailor-made algorithm that leverage the prior knowledge, the data structure.
One of such interesting fields (which I'm working on), is computational biology. We're working on leveraging sparse experimental data for protein structure prediction. To do that, we end up using algorithms and ideas from different various CS fields, from machine learning, to robotics, to distributed systems. Other people are working on exciting fields like computation protein design, studying drug protein interaction in silico..
Are there particular methods you use to deal with little and sparse data?
And I think this also applies to other fields. I gave the book "Algorithms To Live By" (which is basically an overview of CS algorithms) to a medicine student and he was immediately inspiried and came up with ideas on how to apply these ideas on his research. CS algorithms are just so basically true that I think they should be more universally known.
I recently graduated from law school and now am an intern at a law firm. I have a strong interest for CS, and it bothered me for a long time that I went to law school instead of CS.
I'v overcome those feelings over the years and dedicated myself to become a lawyer. But your post caught my interest.
I'd be glad if you could share some of the story behind you studying cs after getting your law degree.
Some learnings so far: 1) I get great feedback for my decision from other lawyers, who are genereally very interested but not well versed in tech. 2) Legal Tech feels a bit overhyped right now, but eventually it will change the field drastically. Law firms need lawyers who have technical skills. And that doesn't necessarily mean a whole CS degree, some programming skills etc. will already do it.
I personally love tech that much that I don't want to go back to a law firm to practise law, but rather actually develop technology. But for you, if you want to become a lawyer, I can promise you that you will find a fertil ground for your interest. It soon will be one of the most sought after skills for law firms. So if you learn some programming (maybe you already know some), take some online courses (there are great resources for CS online), then the next time your law firm gets offered a (as magic advertised) ML tool or needs to implement a new tech solution which really influcences the workflow, you will be the star of the firm for being a critical but competent colleague. Or if you're starting your own law firm, I think there is great potential for a more automated workflow. In your position, I would be very glad for you CS interest – you in the right field and it is the right time for it!:)
It is really nice to hear that my skills and interest in computers won't go wasted in practicing law. I hope my firm also gets offered an ML tool where I can show my skills. For now I can navigate the document management systems with ease, use some word add-ins (contract companion etc.), I guess that'll change in time and I'll have access to more sophisticated tools.
I'm about to go back to University to study law but I would love to be able to combine Law with technology. Seems like an interesting area.
- Working as a lawyer in a law firm and being the expert/contact person for any tech stuff.
- Working as project mananger for Legal Tech in a law firm (Magic Circle law firms are already having these jobs)
- Being a lawyer specialised in IT/tech/IP laws, which require a domain understanding.
- Working for or founding a Legal Tech start-up.
- Owning a law firm that is having an automated workflow which is specifically engineered.
Right now, there aren't too many jobs on the market. But they will become more. And I can promise you, for most of all people tech is a black box (which is also bothering people), and with it being more and more integraded in our workflows, being tech savy will become more important in virtually any job (including government etc.).
I'm intrigued at what you are referring to by the important questions in law, as they relate to CS algorithms?
I think taking CS and "bouncing it off" of other disciplines is where the real magic happens.
It happens, but far too rarely.
Universities understand silos. Supervisors get nervous when a student wants or needs to work with another department. There are reasons for this: supervision and grading become hard, and funding applications become complex. But this simply uncovers the depth of the silo effect.
Arts departments are at the vanguard here. You'll be far more likely to find a fashion PhD working with a biologist than you would to find a comp sci PhD working with a lawyer. Perhaps medicine gets it too, but even then it's largely the lab-based stuff like image processing. The clinical and public health worlds are only starting to gain exposure.
That's my experience anyway, hopefully others have counter experiences.
Utilizing machine learning to process and analyze historical texts could shine a light on patterns that have gone unnoticed thus far.
I would want something where it doesn't just enabled me use CS tools and algo to apply to works in those fields (a crude example would be: use of some ML also on Shakespeare's works) but also lets me study both that field and CS.
The ideal emerging field is one that's so obscure we haven't heard of it yet, but so important that we will. If there are widely disseminated books on Amazon about your field, it's not emerging. If there are hundreds of professionals cranking out papers about your field, it's also not emerging.
Emerging fields are underrated and under-recognized. What are they?
"A type of simulation which some experimental evidence suggests we don't live in" https://philpapers.org/archive/ALEATO-6.pdf
Nevertheless, it's an interesting observation that we can now easily do experiments that demonstrate correct behavior of logic to the 10^-15 level. If Descartes were looking for evidence of the fallibility of a daemon creating his sense data, it would have been hard to demonstrate better than 10^-3 or 10^-4.
To borrow from Nick Bostrom: suppose we run two types of simulations. Important simulations and un-important simulations. For the important sims, we use error-correcting codes, we save checkpoint images, etc. For the unimportant sims, we don't do those things, in order to save money. This allows us to run far more unimportant sims than important sims. Thus, if someone is incarnated randomly in one of the sims, it's probably one of the cheap ones (just because there are more cheap sims than important sims, by basic economics). The point is just to show that it is possible for a philosopher to argue against error-correcting codes etc. Indeed, if we leave it to philosophers, we'll probably never make progress.
We need to appeal to the muse of science, that harsh mistress who serves us cold hard facts, every single one of which throws 50% of philosophers out into the darkness where there is wailing and gnashing of teeth :)
Its just a catch phrase, there is no real objective boundary
I'm particularly working with the mining of plans (as in Automated Planning) in declarative process models. If I have a chance I'll look into it, thanks for the heads up
It provides automatic visualisation of graphs, analysing of bottlenecks, and lots of analytics. While you only need system logs linked to an id.
I consider type theory and formal verification to be more promising (but more academic). Distributed systems and everything having to do with parallel and/or high-performance systems is a good midway between what the industry likes and what's interesting from an academic point of view.
Formal verification has been around for 40/50 years and we can't say it is a wide success from a industrial point of view. It has some achievements in terms of results/methods and projects checked, but on a daily basis, pretty much no one uses it. We are ages away of having every programmer understanding formal verification and having all programs verified/proved.
Type theory is in a similar situation. Many issues in code could be solved with basic typing algorithms but people and companies favor languages with poor/no typing (python, Javascript).
Is the customer going to be happy with "we've billed $X for a formal spec and that means that we can't make the change that you want, that seems simple without $Y dollars for changes to it and the code." Notice that software methodologies have gone the opposite direction here, with Extreme Programming basically aiming to make all of the programmer's activities revolve around exactly what and only what the customer has actually requested.
I think there is real value in having verified libraries or at least libraries with well defined specs so that interfacing with other code wasn't so tedious. I think this issue is starting to be overcome with regard to the usage of strong type systems. Truly strongly typed languages are finally getting the libraries and communities built up so that they don't seem quite as daunting.
I try to break this barrier a bit with my upcoming book: Gentle Introduction to Dependent Types with Idris.
I am very interested in this area but it is impossible for newcomers to get a grasp of it without too much digging. Logical Foundations was OK but I was still missing the theoretical explanation ("why does this tactic work? it is magic!").
So with accumulated knowledge from IRC, forums I hope to address this.
And as you noted there definitely is a lot of "magic" when it comes to the inner workings of theorem proving tactics. I'm slowly figuring all of that out but like you said it definitely takes time and digging at the moment.
Formal verification is an essential part of mission critical applications. Therefore, even though they might be few in number - their impact is pretty significant and "wide".
Also, JPL released its model-checker Java PathFinder and hosts every year the Nasa Formal Method conference so I'm pretty confident that at least someone at NASA is interested in formal methods =)
Formal verification is used in some niche areas (BAE, Galois). Proof Engineer is a real role some companies are looking to fill.
Recent prog languages have added syntax to avoid issues such as "off by on error" (generator etc...), TDD is slowly becoming a standard everywhere. The next step to improve quality in software is formal verification IMO. There is quite a bit of research in that domain and even some academic program languages integrating it within their syntax.
Maybe not for software but certainly in the hardware world formal verification is common place with mature tools available from multiple vendors.
Of course, the point is not to prove every program correct. But it should be feasible to prove security-critical parts correct, especially for large companies.
The biggest problem is that formal verification is about as un-sexy as it gets, since it has no applications an sich.
See: https://www.forbes.com/sites/louiscolumbus/2018/01/12/10-cha... or in general any other marker like NIPS submissions or arXiv preprints on DL.
Of course focus changes, and maybe in the next 2 years it will be on something different than RL. But still, even in Computer Vision it is still a very vibrant field, since its breakthrough in late 2012 (https://www.eff.org/ai/metrics). The majority of more traditional disciplines of CS had their breakthroughs a few decades ago.
There are probably more but those are the ones off the top of my head.
To me it is still not clear how scalable the DNA computing is, but there are nice proofs of concept already [2].
[1] https://en.wikipedia.org/wiki/DNA_computing [2] https://www.nature.com/articles/s41586-018-0289-6
Not sure when it will have its internet moment, but the universe has been doing this for a long time and once we unlock its secrets, we become a wee-bit closer to Gods.
Going into CS as an undergrad, I didn't anticipate the depth that the field had in other domains -- and for some time, I wanted to double major in {math, biology, economics} to supplement my education.
However, while in the algorithms course, I stumbled upon a connection between linear programming and 2-player zero-sum games (the minimax theorem [2]). Up to that point, I had never considered the idea of using a computational lens to view problems outside of CS, such as "what is the complexity of Nash equilibrium?"
It turns out Algorithmic Game Theory can be applied to study theory of auctions (Why does Ebay use 2nd-priced auctions?) [3], tournament design (Why would a team purposely lose?) [4], or something as basic as routing (Why does building more roads lead to more congestion?).
[1] https://en.wikipedia.org/wiki/Algorithmic_game_theory
[2] https://en.wikipedia.org/wiki/Minimax_theorem
AR is potentially an interesting sub-field, but doesn’t seem to be the answer for everything (e.g. those form-like data entry tools...)
(If you're not convinced, try watching how often you have to ask your fellow humans what they meant by a communication and/or a request for information. It's probably more often than you expect - but you give fellow humans a pass because you're used to it, and so are they.)
Either that, or personal data has to stored in a central server so it can be accessed on demand by web apps - which would eliminate a lot of web forms, but would have uncomfortable political and social implications.
There's still room to improve form-based pages, because there's still far too little research into best practice. But forms are an efficient way to collect information, so it's hard to imagine a secure and private UI paradigm that would eliminate them altogether.
That doesn't necessarily require centralisation. Web browsers have some form-filling capabilities now, and that data can stay under end-user control. Perhaps there's scope for building on something like this (although the growth of, _e.g._ "social login" doesn't leave me too optimistic. That perhaps does count as an example of UI innovation, although one which hasn't particularly registered with me since I tend to avoid it).
There's still room to improve form-based pages, because there's still far too little research into best practice. But forms are an efficient way to collect information, so it's hard to imagine a secure and private UI paradigm that would eliminate them altogether.
Agreed. I don't see easy wins, but trying to make forms as good as they can be seems a very worthwhile area of endeavour. I suspect part of this might be trying not to go too far in terms of baking "business rule" type stuff into forms, which has a tendency to leave people in impossible states (thinking, for instance, of academic grant systems which can end up with some very strong assumptions about career paths built in)
DeepFake Creation Tools - https://voat.co/v/DeepFake/2405562
Adobe Voco = https://en.wikipedia.org/wiki/Adobe_Voco
https://en.wikipedia.org/wiki/Conflict-free_replicated_data_...
Another note on "smart contracts" in the first sense, or as I would put it, trusted computation as way of executing multi-party agreements. This approach already in application in electronic markets for example, and public blockchains seem to be a way to bring this to the masses. But I think it's still hard to say how this can interplay with "wet" decisions (involving a judge or an arbitrator). That's probably one of the interesting questions in this domain.
Some problem domains are killer apps, like self driving cars, and on smartphones, personal digital assistants and verbal interfaces. There's no stopping these initiatives. They only question is how far each can go without moon shot levels of investment. But between the economic interests of especially Google and Apple to advance their mobile devices, and the military to make weapons and intel as smart as possible, I'm convinced there's enough critical mass for AI's pile to stay hot for a couple of decades or more.
The trick is to avoid the roadblocks that today's academic agenda inflicts on researchers by demanding they publish frequent shallow incremental novelties. What's needed is 5-10 years to develop the infrastructure that's needed to enable the fielding of robust general reasoning w/ causation and rich knowledgebases.
As a web developer: WebAssembly
As a DevOp: Kubernetes
As a backend engineer: headless (CMS) API systems like Strapi or Wagtail
What is the meaning of headless anyway ?
According to wikipedia, the term "headless" comes from the concept of chopping the "head" (the front-end, i.e. the website) off the "body" (the back-end, i.e. the content repository).
Here's the basis:
Start with a category theoretical model connecting neuroanatomy and thought (MENS, category theory and the hippocampus). Combine with the concepts of universal embedding and fully abstract languages. Replace computers in the previous sentence with computational model of human; I'm playing with modified versions of differentiable neural computers and perceptual sets comprised of beliefs, emotions, intentions, and behavior/thought patterns. Choose a human language to mathematically hack into a strict subset of itself so it meets the requirements for a target language in universal embedding. I suspect some form of type theory might be needed for that; coeffects seem like they could be useful, as well as quantitative type theory. Use yourself as the primary experimental subject (ie. the test machine) to help guide things and don't worry about reproducible results...trust that you're an ordinary human with essentially the same cognitive functions as everyone else, for now. Explore how this can impact human relationships. Discover ways to organize the self in such a way as to more effectively organize at scale.
Teach the world how to program itself at an individual level.
Yeah... um... let us know when you've got that in a form that is really true to neuroanatomy, really true to human thought, and really solid category theory. I'm pretty sure you're not going to get there in this lifetime.
Not saying that there isn't merit to the idea. Just saying that program synthesis is more or less synonymous with programming language design when you take into account the challenges involved.
Secure execution environments.
[0]http://www.computervisionblog.com/2015/04/deep-learning-vs-p...
[1]http://probabilistic-programming.org/wiki/Home
[2]https://www.coursera.org/specializations/probabilistic-graph...
Its hard to do and has lots of real world applications.
https://www.youtube.com/watch?v=eSi6J-QK1lw
You don't need AI to keep your car's body level. The technology has been around in various forms for over 60 years.
So much of what people believe we need AI for is amenable to classical engineering techniques.
What was the most interesting CS field(s) in 2008, 98, 88, etc?
DTP
OO
RISC CPUs
'graphics' (as in render farms)
98:
Linux, Apache, Mozilla, OSS in general
Perceptual audio compression : MP3 (layer3.org, MP3 vs TwinVQ, codecs created during the period before Fraunhofer announced the source code it uploaded to ISO without a license and that people had been working on for free, in fact had a license and everyone owed them 10 grand).
2008:
Cloud
mobile (location in particular). Think Foursquare vs Gowalla vs Burbn, Grindr, other early mobile location-aware apps. App stores for popularised by Apple that same year.
AJAX, Rails
blogging.
OSI network stacks. They were going to replace the 'old' Internet protocols.
Relational Databases, SQL and two phase commit.
Formal methods and verification.
Still emerging.
And we are already seeing this being heavily developed in autonomous driving systems and others, but I feel like the biggest computer vision applications will require much more information than a 2d image can offer. Instead, recognising objects when you have 3d information seems much more reasonable to me.
Functional programming languages have several classic features that are now gradually adopted by none FP languages.
Lambda expressions [1] is one such feature originating from FP languages such as Standard ML (1984) or Haskell (1990) that is now implemented in C#3.0 (2007), C++11 (2011), Java8 (2014) and even JavaScript (ECMAScript 6, 2015).
Pattern matching [2] is another feature that is now^2015 implemented in C#7.0. My bet is that Java and other will follow in the next versions.
Here is a list of FP features. Some of which are already adopted by none FP languages: Lambda expressions, Higher order functions, Pattern matching, Currying, List comprehension, Lazy evaluation, Type classes, Monads, No side effects, Tail recursion, Generalized algebraic datatypes, Type polymorphism, Higher kinded types, First class citicens, Immutable variables.
The big changes are happening in engineering (software and hardware).
Many things that were known for decades are now accessible for a broader audience.
The cutting-edge emerging tech I feel will be in the way we engage with data and tech and Augmented Intelligence (assistive) will see huge advancements.
Thankfully the online resources around electronics are plentiful and PCBs can be had for under 10$ incl. S&H.
That way I can make all my lighting IoT without having to deal with the garbage of the IoT industry.
No. There are those who do understand blockchain and still don't support it. A great example is professor Jorge Stolfi. He is one of the more prominent detractors, and yet he routinely displays a very thorough understanding of the technology.
I don't claim to contradict that he is against the concept of cryptocurrencies or blockchain in general, but I fail to find evidence that he is against the technology in general.
I do find evidence he is opposed to Bitcoin in specific, or at least warns against it.
Could you point me to English writings where he argues against blockchain/cryptocurrency in general?
Here's his primary English writing on Bitcoin and cryptocurrency in general (not necessarily blockchain), sent to the SEC: https://www.sec.gov/comments/sr-batsbzx-2016-30/batsbzx20163...
This critique of Bitcoin is quite short, and seems directed at Bitcoin in particular, in no way do I conclude that he is against the concepts of blockchain (say non-currency), or perhaps even cryptocurrencies that do not take on some of the Ponzi aspects.
After reading this I can perfectly imagine (but do not claim so) that he might support certain other forms of blockchains and/or cryptocurrency...
https://www.reddit.com/user/jstolfi
He primarily posts in buttcoin, a sub that exists to mock bitcoiners. It's pretty fair to say he thinks all coins are crap, not just bitcoin.
Also, please include me in the "Understands cryptocurrencies and yet doesn't support it" bucket please :)
But they don't know that, so they keep bashing the blockchain without having any knowledge of other good platforms.