> An app is not the best way to learn piano.

To many beginners starting out, the term "learn piano" can be used in a generic way and could mean anything from becoming a classical concert pianist, a Rick Wakeman-esque rock keyboardist, a Daft Punk-like synthesist, a digital composer creating symphonic cinema scores out of virtual software plug-in orchestras - or they may want to target the flexibility to "do it all." I'm a largely self-taught, hobbyist digital producer who loves my 61-key MIDI-only, synth action Fatar key beds but we started our elementary-aged kid with a Julliard-trained classical piano teacher and bought a $600 88-key, fully weighted Casio MIDI keyboard for home practice. The Casio sound engine doesn't sound as good as the virtual Bosendorfer in my laptop but it's more than good enough and our kid has benefited greatly from having traditional instruction (for form, posture, bad-habit prevention, etc) but also enjoys practicing teacher-approved pieces with a tablet-based, gamified MIDI app that reports practice frequency, accuracy, speed, timing variance, etc stats back to the teacher to inform progress as well as areas for improvement.

Your advice would be generally applicable to a beginner with goals similar to my kid but off target for a beginner with goals like mine.

>> connect it to an el cheapo midi keyboard

I agree that just saying "cheap midi keyboard" needs a warning that there are some really poor quality keybeds on the lower-end. The issue is not just the "weighting" of the keys not matching a mechanical piano but also wobble side to side, inconsistent trigger depth, no velocity sensitivity. These issues can substantially impact basic playability and expressiveness to the extent that much of the practice may not fully translate to decent (ie more "standard") key beds.

> non-weighted keys will limit you a lot

This depends on whether the learner wants to be able to play a traditional mechanical piano which is what "weighted" key beds emulate. Weighted key beds respond very differently compared to what's called "synth action" key beds. Real piano keys require substantially more finger pressure to actuate, go down slower, and come back up slower. The trigger curve is also different than synth action. Personally, I actually prefer a high-quality synth action key bed. I have over a dozen different high-quality synth action key beds on various MIDI-only keyboards as well as synthesizers I've acquired over two decades of playing. While I'm very particular about the feel of the key beds I use, my goal has never been to be a "piano player" but rather a "keyboardist". I feel this is more a matter of personal preference and goals than objective right or wrong. My advice to beginners is to be aware of the differences and make an informed choice by first visiting a music store like Guitar Center and trying out several key beds of different types and quality levels. Regardless of their goals I generally advise beginners to stay away from any MIDI-only controller keyboards which are less than $200 new MSRP or any MIDI+sound source keyboards which are less than $400 new MSRP as those likely have meaningful compromises in basic quality or features to reach that price point. If someone's not experienced, it's also generally a good idea to lean toward better-known brands like Yamaha, Korg, Roland, etc and read pro reviewer's assessments.

> The sound is terrible

Many people these days don't have the space or funds for a real piano (and even a small one can be heavier than a fridge). If it's not a real piano, then you're triggering a virtual sound source. The quality of any virtual sound source is a more a matter of DSP processing power, sample memory, algorithm quality, etc. There are some very good virtual piano sound engines in relatively inexpensive MIDI keyboards (especially used via Craigslist) as well as in laptop, tablet and even phone-based MIDI software apps. I have a virtually modeled Bosendorfer Grand Piano software plug-in on my Dell XPS 2-in-1 laptop that's pretty indistinguishable from a real one.