I'm new to electronics and still exploring stuff and learning basics. Coming from a computer science background, I was wondering if electronic circuit design can be treated in an abstract manner like we do with algorithm design. For instance, do we have the same flexibility like in designing an algorithm to solve a problem? I noticed that there are a few types of amplifiers that are treated as black boxes and do certain jobs. This means that somehow circuit design involves integrating different pre-built/designed components to create a more complex system. But I noticed also there's some kind of limitation in using and analyzing circuits and it could be me not understanding the subject very well. For example, I have not come across a subject that discusses how to generate a waveform of a desired shape that's not one of the standard waves, sinusoidal, square, sawtooth, square, ...etc. There could be some circuits that generate a specific shape but there's no explanation on how to approach designing a circuit that does so. Another example is how to predict the behavior of a specific circuit. I'm trying to correspond things in both fields, CS and EE, but I find in CS it's more flexible the way we do things in algorithms. Reading some microelectronics books, they describe only predefined sets of very basic building blocks, BJT, FET, OpAmp and some of their applications. There's no in depth rigorous explanation on how to interconnect various elements to create a more complex devices. Am I missing a good text book? Or it's just different than designing an algorithm and programming? Help appreciated.